Plsql 过程中的pl sql集合变量
我不知道如何在调用另一个存储过程的存储过程中设置变量。我想保存返回的值,稍后在另一个select中使用它 我想这样做:Plsql 过程中的pl sql集合变量,plsql,Plsql,我不知道如何在调用另一个存储过程的存储过程中设置变量。我想保存返回的值,稍后在另一个select中使用它 我想这样做: 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
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;
一旦我弄明白了怎么做,那么我也可以分解类似的东西(不理解proc名称:
SELECT concat(concat(SUBSTR(susr2, 0, INSTR(susr2, '-')-1),'' ),' - ' || getExternlineno(exlineno,'50036648','00060')) from OrderDetail;
Egor的评论是正确的。您应该将
getExternlineno
声明为函数,以便在SQL查询中使用它
然后,函数getexternalineno
将变为:
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;
/
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;
/
然后,您的procName
过程将变成:
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;
/
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;
您应该将
getExternlineno
声明为函数,而不是过程。或者您通过引用使用值(oRetValue OUT varchar2
),那么您就不需要在调用过程中使用exlineno:=
,或者您按照Egor所说的那样执行。在您的情况下,函数看起来更好…使用函数。