Plsql 过程中的pl sql集合变量

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

我不知道如何在调用另一个存储过程的存储过程中设置变量。我想保存返回的值,稍后在另一个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(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所说的那样执行。在您的情况下,函数看起来更好…使用函数。