Форум: "Базы";
Текущий архив: 2005.03.13;
Скачать: [xml.tar.bz2];
ВнизСоздание хранимой процедуры в 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 вся ветка
Форум: "Базы";
Текущий архив: 2005.03.13;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.04 c