OUT-параметр
Релиб
Форумы       Участники    Календарь    Кто он-лайн?
Добро пожаловать, гость ( Вход | Регистрация )
        



OUT-параметр Expand / Collapse
Автор
Сообщение
27.05.2002 15:49
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme 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, и вызывающая процедура должна работать с учётом этого. Так как я могу опросить в вызывающей процедуре выходной параметр из неё вызываемой процедуры?
Заранее благодарю за помощь
Сообщ. #751096
27.05.2002 19:03
Forum Member

Forum MemberForum MemberForum MemberForum MemberForum MemberForum MemberForum MemberForum 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;
Сообщ. #751130
28.05.2002 8:50
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 21.02.2007 18:25
Сообщ.: 109, Visits: 1 201
Спасибо! В PLSQL - никаких проблем. Пашет.
Но... жисть диктует свои суровые законы...
С этим тоадом получаешь действительно
не только удобства. Не были ли Вы столь
любезны подкинуть ещё маленькую подсказку по
этим самым связывающим переменным...
Спасибо ещё раз!
Сообщ. #751172
28.05.2002 10:36
Forum Member

Forum MemberForum MemberForum MemberForum MemberForum MemberForum MemberForum MemberForum 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
Сообщ. #751185
03.06.2002 15:53
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme 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?
С уважением
Олег
Сообщ. #751782
03.06.2002 16:06
Forum Member

Forum MemberForum MemberForum MemberForum MemberForum MemberForum MemberForum MemberForum 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.
Сообщ. #751784
03.06.2002 19:06
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 21.02.2007 18:25
Сообщ.: 109, Visits: 1 201
Угу понял. Поробуем-с...
Ешё раз благодарю!
Сообщ. #751811
« пред. тема | след. тема »


Эту тему читают Expand / Collapse
Посетители: 0 (0 гостей, 0 участников, 0 скрыт.участников)
Сейчас нет участников, просматривающих тему.
Модераторы: Alexey, boombastik, bazile, pl

Время GMT +3:00, Сейчас 9:25