PL/SQL配列渡し
パッケージ部
CREATE OR REPLACE PACKAGE ARRAY_TEST IS TYPE testtype IS TABLE OF VARCHAR2(10) INDEX BY PLS_INTEGER; PROCEDURE get_test(para1 IN testtype, para2 OUT NUMBER); END; /
パッケージボディ部
CREATE OR REPLACE PACKAGE BODY ARRAY_TEST IS PROCEDURE get_test(para1 IN testtype, para2 OUT NUMBER) IS BEGIN para2 := para1.COUNT; END get_test; END; /
単に、配列のサイズを返すだけ
SQL*Plusで実行
DECLARE para1 ARRAY_TEST.testtype; para2 NUMBER; BEGIN para1(1) := 'AA'; para1(2) := 'BB'; para1(3) := 'CC'; ARRAY_TEST.get_test(para1,para2); DBMS_OUTPUT.PUT_LINE(para2); END; /
ここで若干詰まったのが、para1に型について
一度パッケージで宣言した型をもう一度宣言しないといけないのかと思っていたが、しなくていいみたい。
(この部分「TYPE testtest IS TABLE OF VARCHAR2(10) INDEX BY PLS_INTEGER;」)
むしろ、宣言してpara1の引数の型にした場合、
パッケージ部の型とSQL*Plusで宣言した型は違うものと判断されるので、
引数の方が正しくありませんみたいなエラーがでる。