|
|
|
Supreme Being
      
участник
Last Login: 21.02.2007 18:25
Сообщ.: 109,
Visits: 1 201
|
|
Добрый день всем! может это и смешно но такая проблема меня терзает: не могу вызвать процедуру с выходными параметрами. Декларирую, присваиваю в теле процедуры значение, а при попытке вызвать - ругается. Как вообще вызывается в TOAD процедура PROCEDURE_NAME (p_in IN VARCHAR2, p_out OUT CHAR)? И ещё следующий вопросик, если позволите. Как опросить этот выходной параметр в вызывающей среде? Ну, допустим, взависимости от того, что произошло в этой PROCEDURE_NAME, параметру p_out присваивается 1 или 0, и вызывающая процедура должна работать с учётом этого. Так как я могу опросить в вызывающей процедуре выходной параметр из неё вызываемой процедуры? Заранее благодарю за помощь
|
|
|
|
|
Forum Member
      
участник
Last Login: 16.09.2005 15:23
Сообщ.: 46,
Visits: 507
|
|
Вызвать процедуру с out-параметром можно только из PL/SQL. Там же его можно и опросить. Пример:
DECLARE
n NUMBER;
BEGIN
Procedure_Name (n);
IF n=0 THEN ... END IF;
END;
Если TOAD поддерживает bind-переменные, то можно получить результат так:
BEGIN Procedure_Name (:bind_var); END;
|
|
|
|
|
Supreme Being
      
участник
Last Login: 21.02.2007 18:25
Сообщ.: 109,
Visits: 1 201
|
|
Спасибо! В PLSQL - никаких проблем. Пашет. Но... жисть диктует свои суровые законы... С этим тоадом получаешь действительно не только удобства. Не были ли Вы столь любезны подкинуть ещё маленькую подсказку по этим самым связывающим переменным... Спасибо ещё раз!
|
|
|
|
|
Forum Member
      
участник
Last Login: 16.09.2005 15:23
Сообщ.: 46,
Visits: 507
|
|
Bind-переменные - это переменные, задаваемые извне. В тексте предваряются двоеточием.
Например такая кострукция в TOAD работает:
select :d from dual TOAD запрашивает значение :d.
Такая тоже работает:
begin select 10 into :d from dual end;
Но где посмотреть получившееся значение :d, я не нашёл :). Может знатоки по TOAD подскажут. Я им не пользуюсь.
Вообще-же всем рекомендую PL/SQL Developer - очень удобная штука. http://www.allroundautomations.nl/plsqldev.html
|
|
|
|
|
Supreme Being
      
участник
Last Login: 21.02.2007 18:25
Сообщ.: 109,
Visits: 1 201
|
|
Извиняюсь за то. что не ответил сразу - командировка (: Большое спасибо за помощь. В TOAD сия фиговина тоже пашет. В простейшем случае при запуске процедуры контейнера begin Out_Container; end; выдаётся сообщение сообразно значению из процедуры Out_Probe.
CREATE OR REPLACE PROCEDURE Out_Probe (p_out OUT VARCHAR) IS BEGIN p_out := 0; END;
CREATE OR REPLACE PROCEDURE Out_Container IS v_probe VARCHAR (20); BEGIN Out_Probe (v_probe); IF v_probe = 1 THEN dbms_output.put_line ('Pashet!'); ELSE dbms_output.put_line ('Ne pashet!'); END IF; END;
Ещё раз спасибо за подсказку. Я так понимаю (сейчас будет глупый вопрос) что этими выходными параметрами можно оперировать только в пределах PLSQL? Нет ли какого-нибудь фокуса чтобы передать это "наверх" - в VB допустим. Или это уже вопрос по ADO? С уважением Олег
|
|
|
|
|
Forum Member
      
участник
Last Login: 16.09.2005 15:23
Сообщ.: 46,
Visits: 507
|
|
Фокуса никакого нет - передавать можно через те же самые bind переменные, а вот как это сделать в VB - это уже действительно вопрос по ADO, я не знаю.
Идея такая - переменная описывается в VB и далее передаётся как часть выполнения запроса.
Кстати сказать, кострукцию [code] BEGIN Procedure_Name (:bind_var); END; [code] Oracle воспринимает как обычный SQL-запрос. И может быть исползована везде, где может быть использован SQL-запрос.
P.S. Под SQL-запросом я понимаю не только SELECT.
|
|
|
|
|
Supreme Being
      
участник
Last Login: 21.02.2007 18:25
Сообщ.: 109,
Visits: 1 201
|
|
Угу понял. Поробуем-с... Ешё раз благодарю!
|
|
|
|