0

別のストアドプロシージャを呼び出すストアドプロシージャに変数を設定する方法がわかりません。返された値を保存して、後で別の選択で使用したいと思います。

私はこのようなことをしたい:

 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;
4

1 に答える 1

1

エゴールは彼のコメントに正しい。getExternlinenoSQLクエリ内で使用するには、関数として宣言する必要があります。

その場合、関数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;
于 2013-03-15T09:01:06.813 に答える