Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.03.13;
Скачать: 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 вся ветка

Текущий архив: 2005.03.13;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.039 c
14-1108479143
GRAND25
2005-02-15 17:52
2005.03.13
Новый футбольный сезон


3-1108448610
first_may
2005-02-15 09:23
2005.03.13
BLOB


14-1108748490
Knoxville
2005-02-18 20:41
2005.03.13
Как из картинки с текстом сделать просто текст?


4-1106898466
Jetus
2005-01-28 10:47
2005.03.13
Получение результатов выполнения командной строки


14-1109082292
ParaSenok
2005-02-22 17:24
2005.03.13
Чат