いいえ、それは許されていない:
SQL> CREATE OR REPLACE PACKAGE AF_CONTRACT AS -- spec
-- PROCEDURE my_rpcedure (emp_id NUMBER);
TYPE DTO_GRID AS OBJECT
(
ROWKEY NVARCHAR2(200),
COLUMNKEY NVARCHAR2(200),
CELLVALUE NVARCHAR2(200),
OLDVALUE NVARCHAR2(200),
TAG NVARCHAR2(200)
);
END AF_CONTRACT;
/
2 3 4 5 6 7 8 9 10 11 12
Warning: Package created with compilation errors.
SQL> SQL> sho err
Errors for PACKAGE AF_CONTRACT:
LINE/COL ERROR
-------- -----------------------------------------------------------------
3/4 PLS-00540: object not supported in this context.
SQL>
あなただけのPL/SQLを使用し、次にPL/SQLプロシージャの間でデータを渡しているタイプを作成する場合RECORDの構文は:あなたはSQL文で使用できるタイプが必要な場合は
SQL> CREATE OR REPLACE PACKAGE AF_CONTRACT AS -- spec
-- PROCEDURE my_rpcedure (emp_id NUMBER);
TYPE DTO_GRID IS RECORD
(
ROWKEY NVARCHAR2(200),
COLUMNKEY NVARCHAR2(200),
CELLVALUE NVARCHAR2(200),
OLDVALUE NVARCHAR2(200),
TAG NVARCHAR2(200)
);
END AF_CONTRACT;
/
2 3 4 5 6 7 8 9 10 11 12
Package created.
SQL>
しかし、 - それはへの入力として、あります関数 - SQL型として作成する必要があります。 SQLとPL/SQLは2つの異なるエンジンを使用し、SQLタイプのみがSQLエンジンに表示されます。
SQL Typesの必要性に関する私のアドバイスは、Oracleのそれ以降のバージョンでは当てはまりません。確かに11gR2と12cでは、SQLエンジンはTABLE()
句でPL/SQLテーブルを使用するPL/SQLパッケージでSQLをサポートします。型はパッケージ仕様で宣言されなければならないため、パブリックであり、SQLエンジンで可視です。カバーの下で、Oracleは宣言ごとにSQL型を生成します。名前がSYS_PLSQL_
の後に数値識別子が続くので、これらのタイプを見つけることができます。
出典
2011-11-28 17:45:01
APC