Oracle 11g で次のようなことができますか。
select cast(multiset( select * from table_name) as table_name%TYPE) from dual;
タイプを事前定義せずにプレーンSQLで?ポリモーフィズムのようなものをサポートしていますか?
Oracle 11g で次のようなことができますか。
select cast(multiset( select * from table_name) as table_name%TYPE) from dual;
タイプを事前定義せずにプレーンSQLで?ポリモーフィズムのようなものをサポートしていますか?
より大きな問題は、ここで何を達成したいのかということだと思います。オラクルによると、
MULTISET は、副問合せの結果セットを取得してコレクション値を返すようにOracle Databaseに通知します。
したがって、あなたの例では (正しく変更されている場合)、複数の行を返し、それらをコレクションに入れています。これはさまざまな形式 (varray、ネストされたテーブル、オブジェクトのテーブルなど) である可能性がありますが、目標は、クエリからコレクションにデータを入力し、コレクションを使用することです (これが、大きな問題は、あなたが何をするかということです最終的にやりたい/達成したい)。
これは、少し前にどこかからコピーし、参照用に保持した例です。多分これはあなたを助けるでしょう:
-- The following objects create the basis of the example that follows:
CREATE TABLE projects
(employee_id NUMBER, project_name VARCHAR2(10))
/
CREATE TABLE emps_short
(employee_id NUMBER, last_name VARCHAR2(10))
/
CREATE TYPE project_table_typ AS TABLE OF VARCHAR2(10)
/
-- The following example of a MULTISET expression uses these objects:
SELECT e.last_name,
CAST
(
MULTISET(SELECT p.project_name
FROM projects p
WHERE p.employee_id = e.employee_id
ORDER BY p.project_name) AS project_table_typ -- here's your %TYPE --
)
FROM emps_short e
ORDER BY e.last_name
/