ストアドをコールして配列型の戻り値を取得したいのですが、
エラーが出てしまい原因が分かりません。
どなたかご教授頂けないでしょうか?
★PL/SQL★
CREATE OR REPLACE TYPE TBL_NUM10 AS VARRAY(10) OF NUMBER(10);
CREATE OR REPLACE PACKAGE TEST_PKG IS
TYPE TBL_NUM10 IS VARRAY(10) OF NUMBER(10);
PROCEDURE HAIRETU(O_CNT OUT TBL_NUM10);
END TEST_PKG;
/
CREATE OR REPLACE PACKAGE BODY TEST_PKG
IS
PROCEDURE HAIRETU(O_CNT OUT TBL_NUM10)
IS
TMP_CNT TBL_NUM10;
BEGIN
TMP_CNT := TBL_NUM10(0,0,0,0,0,0,0,0,0,0);
TMP_CNT(1) := 1;
TMP_CNT(2) := 2;
TMP_CNT(3) := 3;
O_CNT := TMP_CNT;
EXCEPTION WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(SQLERRM);
END HAIRETU;
END TEST_PKG;
/
DECLARE
O_CNT TBL_NUM10;
BEGIN
TEST_PKG.HAIRETU(O_CNT);
DBMS_OUTPUT.PUT_LINE(O_CNT(1));
DBMS_OUTPUT.PUT_LINE(O_CNT(2));
DBMS_OUTPUT.PUT_LINE(O_CNT(3));
END;
/
★実行結果★
SQL実行中に以下のエラーが発生しました。
ORA-06550: 行4、列4:
PLS-00306: 'HAIRETU'の呼出しで、引数の数または型が正しくありません。
ORA-06550: 行4、列4:
PL/SQL: Statement ignored
よろしくお願いします。
以下のいずれかで通ると思います。
1)パッケージ宣言部から
TYPE TBL_NUM10 IS VARRAY(10) OF NUMBER(10); を削る
2)無名ブロックの変数宣言を以下の通りとする
O_CNT TEST_PKG.TBL_NUM10;
同じ名前の同じ型をスタンドアロンとパッケージ内と両方で宣言しているのが問題でしょう。
お礼
ご連絡が遅れてしまい申し訳ありません。 できました!!! 2)無名ブロックの変数宣言を以下の通りとする O_CNT TEST_PKG.TBL_NUM10; の通りに修正することで問題なく動作致しました。 この度はありがとうございました。