Вниз
Скачать: CL | DM;

Создание хранимой процедуры в Oracle в RunTime   Найти похожие ветки 

← →
mefodiy   (2005-02-04 16:05) [0]

Для выполнения Sql запроса использую SQLConnection. Код на нажатие кнопки следующий:
procedure TMainForm.Button1Click(Sender: TObject);
 var sql_str: string;
begin
 sql_str := "CREATE OR REPLACE PROCEDURE MyFindNds(f_kod IN  VARCHAR2(8),f_nds OUT INTEGER) IS "+
                        "BEGIN "+
                          "SELECT Nds INTO f_nds FROM MAL "+
                          "WHERE MAL.kod = f_kod "+
                        "END MyFindNds ";
 SQLConnection1.Execute(sql_str,Nil,Nil);

end;
При выполнении программы никакой ошибки не выдается, но и процедура не создается (хотя вижу, что обращение к серверу происходит).
В чем тут дело? Спасибо.


← →
Reindeer Moss Eater ©   (2005-02-04 16:06) [1]

/


← →
DenK_vrtz ©   (2005-02-04 16:28) [2]

можно еще записать этот скрипт в файл и прогнать в SQL Plus

к примеру:
WinExec("C:\orant\BIN\PLUS80W.EXE Схема/Пароль@Service_Name  @<имя файла>",1)


← →
Reindeer Moss Eater ©   (2005-02-04 17:15) [3]

В плюсе этот скрипт даст точно такой же результат


← →
mefodiy   (2005-02-04 17:50) [4]

Кое-что исправил (убрал (8) из VARCHAR2 и добавил в двух строках ";"):
procedure TMainForm.Button1Click(Sender: TObject);
var sql_str: string;
begin
sql_str := "CREATE OR REPLACE PROCEDURE MyFindNds(f_kod IN  VARCHAR2,f_nds OUT INTEGER) IS "+
                       "BEGIN "+
                         "SELECT Nds INTO f_nds FROM MAL "+
                         "WHERE MAL.kod = f_kod; "+
                       "END MyFindNds; ";
SQLConnection1.Execute(sql_str,Nil,Nil);
end;
Теперь процедура создается, но со статусом "INVALID"


← →
Reindeer Moss Eater ©   (2005-02-04 18:01) [5]

А может не мудрствовать и отладить ТЕКСТ процедуры в нативном инструменте, и уже потом точить процесс ВЫПОЛНЕНИЯ заведомо правильного скрипта?

Кроме того, у тебя не хватает ограничителя команды после текста процедуры

/


← →
mefodiy   (2005-02-10 14:15) [6]

Простите за поздний возврат к теме. Не было возможности "выйти в эфир".
Отладил процедуру в SQL*Plus. Вот текст:
CREATE OR REPLACE PROCEDURE MyFindNds(
                    f_kod IN VARCHAR2,
                    f_nds OUT INTEGER)
 IS
 BEGIN
   SELECT Nds INTO f_nds FROM MAL WHERE MAL.Kod = f_kod;
 END MyFindKdv;
/
Процедура номально создается со статусом Valid и выполняется из Дельфи без проблем.
Делаю то же самое через Дельфи:

var sql_str: string;
begin
sql_str := "CREATE OR REPLACE PROCEDURE MyFindNds(f_kod IN  VARCHAR2,f_nds OUT INTEGER) IS "+
                      "BEGIN "+
                        "SELECT Nds INTO f_nds FROM MAL "+
                        "WHERE MAL.kod = f_kod; "+
                      "END MyFindNds; "+
                      "/";
SQLConnection1.Execute(sql_str,Nil,Nil);
end;

процедура создается со статусом Invalid и естественно не выпоняется.


← →
mefodiy   (2005-02-10 16:36) [7]

Проблема разрешилась. Ограничитель "/" оказался лишним.
Всем спасибо.



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.028 c
1-1109336235
Kat
2005-02-25 15:57
2005.03.13
Один из компонентов Tedit на панели не должен входить в условиие


1-1109095930
Vasek
2005-02-22 21:12
2005.03.13
Снова про Menu


9-1102787249
MsShtaer
2004-12-11 20:47
2005.03.13
High Dunamic Range Image или по-просту HDRI


1-1109412325
webpauk
2005-02-26 13:05
2005.03.13
Определение имени переменной


6-1105474757
BigError
2005-01-11 23:19
2005.03.13
Проблемы с переходом на Indy 10




   Наверх