パッケージ仕様部で定義されたコレクション型
パッケージ仕様部で定義されたコレクション型は、同一定義のローカル・コレクション型またはスタンドアロン・コレクション型と互換性がありません。
ノート:
このトピックの例ではパッケージとプロシージャを定義しています。詳細は、「PL/SQLパッケージ」と「PL/SQLサブプログラム」をそれぞれ参照してください。
例6-37 同一定義のパッケージ・コレクション型とローカル・コレクション型
この例では、パッケージ仕様部と無名ブロックで、同じコレクション型NumList
を定義します。パッケージでは、NumList
のパラメータを取るプロシージャprint_numlist
を定義します。また、無名ブロックでは、型pkg.NumList
(パッケージで定義した型)の変数n1
と、型NumList
(このブロックで定義した型)の変数n2
を宣言します。無名ブロックは、n1
をprint_numlist
に渡せますが、n2
をprint_numlist
に渡すことはできません。
Live SQL:
この例は、Oracle Live SQLの「同一定義のパッケージ・コレクション型とローカル・コレクション型」で表示および実行できます
CREATE OR REPLACE PACKAGE pkg AS TYPE NumList IS TABLE OF NUMBER; PROCEDURE print_numlist (nums NumList); END pkg; / CREATE OR REPLACE PACKAGE BODY pkg AS PROCEDURE print_numlist (nums NumList) IS BEGIN FOR i IN nums.FIRST..nums.LAST LOOP DBMS_OUTPUT.PUT_LINE(nums(i)); END LOOP; END; END pkg; / DECLARE TYPE NumList IS TABLE OF NUMBER; -- local type identical to package type n1 pkg.NumList := pkg.NumList(2,4); -- package type n2 NumList := NumList(6,8); -- local type BEGIN pkg.print_numlist(n1); -- succeeds pkg.print_numlist(n2); -- fails END; /
結果:
pkg.print_numlist(n2); -- fails * ERROR at line 7: ORA-06550: line 7, column 3: PLS-00306: wrong number or types of arguments in call to 'PRINT_NUMLIST' ORA-06550: line 7, column 3: PL/SQL: Statement ignored
例6-38 同一定義のパッケージ・コレクション型とスタンドアロン・コレクション型
この例では、例6-37のパッケージ仕様部で定義したコレクション型NumList
と同じスタンドアロン・コレクション型NumList
を定義します。また、無名ブロックでは、型pkg.NumList
(パッケージで定義した型)の変数n1
と、スタンドアロン型NumList
のn2
を宣言します。無名ブロックは、n1
をprint_numlist
に渡せますが、n2
をprint_numlist
に渡すことはできません。
Live SQL:
この例は、Oracle Live SQLの「同一定義のパッケージ・コレクション型とスタンドアロン・コレクション型」で表示および実行できます
CREATE OR REPLACE TYPE NumList IS TABLE OF NUMBER; -- standalone collection type identical to package type / DECLARE n1 pkg.NumList := pkg.NumList(2,4); -- package type n2 NumList := NumList(6,8); -- standalone type BEGIN pkg.print_numlist(n1); -- succeeds pkg.print_numlist(n2); -- fails END; /
結果:
pkg.print_numlist(n2); -- fails * ERROR at line 7: ORA-06550: line 7, column 3: PLS-00306: wrong number or types of arguments in call to 'PRINT_NUMLIST' ORA-06550: line 7, column 3: PL/SQL: Statement ignored