私は現在、このコードブロックを使用して、自分の関数から行のコレクションを返します。私はselectで使用するパッケージ関数からのコレクションを返します
select * from table(return_table);
オブジェクトタイプがパッケージで定義することはできませんSQLを発行することで呼び出す
--Source: http://www.adp-gmbh.ch/ora/plsql/coll/return_table.html
create or replace type t_col as object (
i number,
n varchar2(30)
);
/
create or replace type t_nested_table as table of t_col;
/
create or replace function return_table return t_nested_table as
v_ret t_nested_table;
begin
v_ret := t_nested_table();
v_ret.extend;
v_ret(v_ret.count) := t_col(1, 'one');
v_ret.extend;
v_ret(v_ret.count) := t_col(2, 'two');
v_ret.extend;
v_ret(v_ret.count) := t_col(3, 'three');
return v_ret;
end return_table;
/
は、私は(PL/SQLで)働いていたレコードタイプを使用してみましたが、私は選択ができませんでした私がここにいるのと同じ方法でそれから。
パッケージ内の関数を使用してこの結果を達成するにはどうすればよいですか?
答えてくれてありがとう、あなたは彼らはまだ「あなたのパッケージ内のSQLオブジェクトを使用する」と言うとき、パッケージの外で定義する必要がありますか?私はパッケージ内にオブジェクトを定義しようとしましたが、 "PLS-00540:このコンテキストではサポートされていないオブジェクトです"。私は、使用したパッケージ内にすべての型定義を保持しようとしたかったのです。 – TownCube
はいSQLオブジェクトは常にパッケージ外で定義されます。パッケージ内で定義されたPLSQLレコード・タイプにはSQLからアクセスできません。 SELECTからテーブル・オブジェクトを照会する場合は、SQLオブジェクト(パッケージ外のタイプとして定義)が必要です。私は個人的には、むしろ、Oracleによって選択された任意の名前よりも、一貫して名前のついたSQLオブジェクトを自分自身のために使うつもりです。 –