私がやろうとしていることは次のとおりです。
create or replace
package MyPackage
as
type string_list_t is table of varchar2(32767);
function GetPrimaryKeys ( p_table_name varchar2, p_owner varchar2 )
return string_list_t;
end MyPackage;
/
create or replace
package body MyPackage as
function GetPrimaryKeys ( p_table_name varchar2, p_owner varchar2 )
return string_list_t
is
pk_descr string_list_t;
begin
select cast( multiset (
select cols.column_name
from all_constraints cons, all_cons_columns cols
where cols.table_name = p_table_name
and cons.constraint_type = 'P'
and cons.constraint_name = cols.constraint_name
and cols.owner = p_owner
and cons.owner = p_owner
) as string_list_t) into pk_descr from dual; -- error refers to string_list_t
return pk_descr;
end;
end MyPackage;
しかし、それはコンパイルされません:
エラー(16,14):PL / SQL:ORA-00902:無効なデータ型
string_list_t
パッケージの外側を次のように定義すると
create or replace
type string_list_t is table of varchar2(32767);
コンパイルされ、期待どおりに機能します。ここでの違いは何ですか?パッケージで定義されたタイプで正しく行うにはどうすればよいですか?