不,它是不允许的:
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记录语法:
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语句中使用 - 那就是,作为输入到TABLE()
函数 - 您需要将其创建为SQL类型。 SQL和PL/SQL使用两种不同的引擎,并且只有SQL类型对SQL引擎可见。
对于Oracle的更高版本,我对SQL类型的必要性的建议不再适用。当然,在11gR2和12c中,SQL引擎将支持使用PL/SQL包中的SQL,该PL/SQL包使用TABLE()
子句中的PL/SQL表。类型必须在包规范中声明,因此对于SQL引擎是公开的和可见的。在封面下Oracle为每个声明生成SQL类型。您可以发现这些类型,因为它们的名称开头为SYS_PLSQL_
,后跟数字标识符。
来源
2011-11-28 17:45:01
APC