![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Создание хранимой процедуры в Oracle в RunTime [D7]
mefodiy © (2005-02-04 16:05:00)Для выполнения 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;
При выполнении программы никакой ошибки не выдается, но и процедура не создается (хотя вижу, что обращение к серверу происходит).
В чем тут дело? Спасибо.
mefodiy (2005-02-10 16:36:00) [1]Проблема разрешилась. Ограничитель '/' оказался лишним.
Всем спасибо.
mefodiy (2005-02-10 14:15:00) [2]Простите за поздний возврат к теме. Не было возможности "выйти в эфир".
Отладил процедуру в 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 и естественно не выпоняется.
Reindeer Moss Eater (2005-02-04 18:01:00) [3]А может не мудрствовать и отладить ТЕКСТ процедуры в нативном инструменте, и уже потом точить процесс ВЫПОЛНЕНИЯ заведомо правильного скрипта?
Кроме того, у тебя не хватает ограничителя команды после текста процедуры
/
mefodiy (2005-02-04 17:50:00) [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 17:15:00) [5]В плюсе этот скрипт даст точно такой же результат
DenK_vrtz (2005-02-04 16:28:00) [6]можно еще записать этот скрипт в файл и прогнать в SQL Plus
к примеру:
WinExec('C:\orant\BIN\PLUS80W.EXE Схема/Пароль@Service_Name @<имя файла>',1)
Reindeer Moss Eater (2005-02-04 16:06:00) [7]/