ADOStoredProc+Parameter+Boolean+Input

CrazyAdmin
Дата: 15.07.2009 09:34:07
А вот как я его хотел использовать. Из делфи вызывалась такая ХП, которая в зависимости от логического параметра переданного из делфи изменяет соответсвующее (неважно можно varchar или number) значение в таблице в соответсвующей строке:
+ Oracle
 (id_val in admin.arbitrag.id_arbitrag%type,
  bool_val in boolean
 )
is
ins_val admin.arbitrag.control%type;
begin
if bool_val=true then
  begin
  update admin.arbitrag
  set control='-1'
  where id_arbitrag=id_val;
  end;
else
  begin
  update admin.arbitrag
  set control='0'
  where id_arbitrag=id_val;
  end;
end if;
end INS_TEST;

При выполнении процедуры в SQL*Plus все работает отлично, но когда я вызываю хп из Delphi то возникает ошибка.
-=APS=-
Дата: 15.07.2009 10:27:44
автор
При выполнении процедуры в SQL*Plus все работает отлично, но когда я вызываю хп из Delphi то возникает ошибка.
Небось, из SQL*Plus "все работает отлично" как-то так:
SQL> exec your_proc(nnnn, true);
PL/SQL procedure successfully completed.
Неудивительно...
CrazyAdmin
Дата: 15.07.2009 10:39:45
-=APS=-
автор
При выполнении процедуры в SQL*Plus все работает отлично, но когда я вызываю хп из Delphi то возникает ошибка.
Небось, из SQL*Plus "все работает отлично" как-то так:
SQL> exec your_proc(nnnn, true);
PL/SQL procedure successfully completed.
Неудивительно...

Да работает, вот и хочу понять, в чем прикол. Не пояснишь?
Dmitry Arefiev
Дата: 15.07.2009 10:44:12
CrazyAdmin
Да работает, вот и хочу понять, в чем прикол. Не пояснишь?

А ты не поленись и попробуй исполнить begin your_proc(nnnn, True); end; при помощи
TADOQuery, например. Потом задайся вопросом - чем отличаются параметры от констант :)
CrazyAdmin
Дата: 15.07.2009 11:05:09
Dmitry Arefiev
CrazyAdmin
Да работает, вот и хочу понять, в чем прикол. Не пояснишь?

А ты не поленись и попробуй исполнить begin your_proc(nnnn, True); end; при помощи
TADOQuery, например. Потом задайся вопросом - чем отличаются параметры от констант :)


+ SQL*Plus:
admin 8 SUDDEL>begin
  2  ins_test(1,true);
  3  end;
  4  /

Процедура PL/SQL успешно завершена.

Затрач.время: 00:00:00.00

admin 8 SUDDEL>declare
  2  ss integer:=1;
  3  ff boolean not null:=true;
  4  begin
  5  ins_test(ss,ff);
  6* end;
admin 8 SUDDEL>/

Процедура PL/SQL успешно завершена.

Затрач.время: 00:00:00.00


+ TADOQuery с таким запросом (связаные переменные):
begin
ins_test(:gg,:ff);
end;
Выдал неопознаную ошибку.

+ TADOQuery с таким запросом (константы):
begin
ins_test(1,True);
end;
Ошибка, невозможно вернуть набор: CommandText does not return a result set.

И?
Dmitry Arefiev
Дата: 15.07.2009 11:10:45
И, и ... Садись, два бала :)

* TADOQuery с константами - вызывал Open ? А надо ExecSQL.
* Константа True волнует только PL/SQL парсер, но не SQL*Plus,
ADO, OLEDB Provider или OCI.
* Параметр типа ftBoolean волнует ADO, OLEDB Provider, OCI.
Последние два без понятия что с ним делать.
CrazyAdmin
Дата: 15.07.2009 12:05:34
Dmitry Arefiev
И, и ... Садись, два бала :)

* TADOQuery с константами - вызывал Open ? А надо ExecSQL.

Гы..гы :) я уже просек сам этот косяк после того как опубликовал пост, загнался уже.
Я понял уже по поводу OCI. Сейчас реализовал процедуру по другому, могу выкинуть код на оценку и прием ценых замечаний.
Anatoly Podgoretsky
Дата: 15.07.2009 12:07:16
И выставление оценки
Пересдача одним словом.

--
http://www.podgoretsky.com
CrazyAdmin
Дата: 15.07.2009 12:20:14
Короче заработало... Через ADOQuery c константами. Со связанными перемеными пока нет пробую...
CrazyAdmin
Дата: 15.07.2009 13:18:19
И еще интересен такой момент. Есть таблица с 12 полями, написал ХП где происходит добавление всех полей в таблицу (в процедуре для примера всего два поля, все нестал переписывать, дабы нефлудить), процедура компилируеться без ошибок:
+ Oracle
 ( ins_val in admin.direct_content%rowtype)
as
begin
 insert into admin.direct_content (id_content,content)
 values (null,ins_val.content);
end ins_dir;

Как правильно передать параметры и выполнить ХП (из SQL*Plus или Delphi).
Такое вообще работает?