2013-03-13 1 views
0

Я не уверен, как установить переменные в хранимой процедуре, которая вызывает другую хранимую процедуру. Я хочу сохранить возвращаемое значение и использовать его позже в другом select.pl sql set variable в процедуре

Я хочу сделать что-то вроде этого:

PROCEDURE procName(bcur OUT IssCur) 
IS 
cur2 IssCur; 
extCur IssCur; 
exlineno varchar2(30); 

BEGIN 
exlineno :=getExternlineno(exlineno,'50036648','00060'); 
open cur2 for SELECT concat(SUBSTR(susr2, 0, INSTR(susr2, '-')-1),'') from OrderDetail; 

хранимая процедура для вызова

PROCEDURE getExternlineno(
oRetValue OUT varchar2, 
pKey IN varchar2, 
poNum IN varchar2) 
AS 
Begin 
    select externlineno into oRetValue from podetail where pokey = pKey and polinenumber = poNum; 
end getExternlineno; 

однажды я выяснить, как сделать это, то я могу сломать что-то вроде этого (который не понимает название проса:

 SELECT concat(concat(SUBSTR(susr2, 0, INSTR(susr2, '-')-1),''),' - ' || getExternlineno(exlineno,'50036648','00060')) from OrderDetail; 
+2

Вы должны объявить 'getExternlineno 'как функция, а не процедура. –

+0

Либо вы используете значение по ссылке ('oRetValue OUT varchar2'), то вам не нужно' exlineno: = 'в вызывающей процедуре, или вы делаете это, как сказал Егор. В вашем случае функция выглядит лучше ... – Trinimon

+0

Идём функцию. –

ответ

1

Егор в своем комментарии. Вы должны объявить getExternlineno как функцию для использования внутри SQL-запроса.

Функция getExternlineno бы тогда:

FUNCTION getExternlineno(
pKey IN varchar2, 
poNum IN varchar2) 
RETURN VARCHAR 
AS 
DECLARE 
oRetValue VARCHAR2(2000); -- Change the precision as per program's requirements. 
Begin 
    select externlineno into oRetValue from podetail where pokey = pKey and polinenumber = poNum; 
end getExternlineno; 
    /

Ваш procName процедура затем стала:

PROCEDURE procName(bcur OUT IssCur) 
IS 
cur2 IssCur; 
extCur IssCur; 
exlineno varchar2(30); 

BEGIN 
exlineno := getExternlineno('50036648','00060'); -- Notice the change in number of arguments here. 
open cur2 for SELECT concat(SUBSTR(susr2, 0, INSTR(susr2, '-')-1),'') from OrderDetail; 
END procName; 
/

И ваш SQL запрос станет:

 SELECT concat(concat(SUBSTR(susr2, 0, INSTR(susr2, '-')-1),''),' - ' 
      || getExternlineno('50036648','00060')) 
     FROM OrderDetail; 
Смежные вопросы