下記コマンドにてFunctionを呼び出して成功しています。
SQL> variable PO_ERR_MSG varchar2(10);
SQL> execute :ret := FUNC_TEST('20200701','0000','9999',:PO_ERR_MSG);
SQL> print ret PO_ERR_MSG;
下記の様にSELCT文でずっと試験していましたが、上手く行かずexecuteを使った次第です。
function側はPO_ERR_MSGはOUTで定義しております。
元々OUT定義した場合にはSELECTは使えないものでしょうか。
SQL> SELECT FUNC_TEST('20200701','0000','9999',:PO_ERR_MSG) FROM DUAL;
行1でエラーが発生しました。:
ORA-06572: ファンクションFUNC_TESTに出力引数が指定されています
ご存じの方居りましたら宜しくお願い致します。
エラー履歴下記。
SQL> SELECT FUNC_TEST('20200701','0000','9999',:PO_ERR_MSG) FROM DUAL;
SELECT FUNC_TEST('20200701','0000','9999',:PO_ERR_MSG) FROM DUAL
行1でエラーが発生しました。:
ORA-06572: ファンクションFUNC_TESTに出力引数が指定されています
'--------------------------------------------------------------
Creat Function下記
PL/SQL
1CREATE OR REPLACE FUNCTION ATOMBC.FUNC_TEST 2( 3--パラメタ 4 PI_EXECYMD IN VARCHAR2, --実行年月日(YYYYMMDD):任意 5 PI_TERMSCD_FROM IN VARCHAR2, --FROM条件コード:任意 6 PI_TERMSCD_TO IN VARCHAR2, --TO条件コード:任意 7 PO_ERR_MSG OUT VARCHAR2 --エラーメッセージ:異常終了時のORACLEエラー内容 8) 9--戻り値:正常=0/異常終了=-1 10RETURN NUMBER 11IS 12--*************************************************************************** 13--** 変数定義 14--*************************************************************************** 15W_EXECYMD VARCHAR2(8) := TO_CHAR(SYSDATE,'YYYYMMDD'); --初期値:サーバー日付なYYYYMMDD 16W_TERMSCD_FROM VARCHAR2(5) := '00000'; --初期値:FROM条件「00000」 17W_TERMSCD_TO VARCHAR2(5) := '99999'; --初期値:TO条件「99999」 18BEGIN 19--************************************************************ 20--パラメタを変数セット 21IF PI_EXECYMD IS NOT NULL THEN 22 W_EXECYMD := PI_EXECYMD; 23END IF; 24IF PI_TERMSCD_FROM IS NOT NULL THEN 25 W_TERMSCD_FROM := PI_TERMSCD_FROM; 26END IF; 27IF PI_TERMSCD_TO IS NOT NULL THEN 28 W_TERMSCD_TO := PI_TERMSCD_TO; 29END IF; 30 31--処理 32PO_ERR_MSG := 'Nomal'; 33 34--正常戻り値:0 35RETURN 0; 36 37EXCEPTION 38 --予期せぬエラー 39 WHEN OTHERS THEN 40 DBMS_OUTPUT.PUT_LINE(SQLCODE || ':' || SQLERRM(SQLCODE)); 41 PO_ERR_MSG := SQLCODE || ':' || SQLERRM(SQLCODE); 42 --異常終了戻り値:-1 43 RETURN -1; 44END; 45/
回答2件
あなたの回答
tips
プレビュー