プロが教えるわが家の防犯対策術!

ストアドをコールして配列型の戻り値を取得したいのですが、
エラーが出てしまい原因が分かりません。
どなたかご教授頂けないでしょうか?

★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


よろしくお願いします。

A 回答 (1件)

以下のいずれかで通ると思います。


1)パッケージ宣言部から
TYPE TBL_NUM10 IS VARRAY(10) OF NUMBER(10); を削る
2)無名ブロックの変数宣言を以下の通りとする
O_CNT TEST_PKG.TBL_NUM10;

同じ名前の同じ型をスタンドアロンとパッケージ内と両方で宣言しているのが問題でしょう。
    • good
    • 0
この回答へのお礼

ご連絡が遅れてしまい申し訳ありません。
できました!!!

2)無名ブロックの変数宣言を以下の通りとする
O_CNT TEST_PKG.TBL_NUM10;

の通りに修正することで問題なく動作致しました。
この度はありがとうございました。

お礼日時:2008/07/22 09:18

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す