除了上一个答案之外,声明的范围也存在重大差异.
在PL / SQL中声明类型时,例如示例中的记录类型,它只能在PL / SQL中使用.如果它是在程序或函数的本地声明,那么它只能在该子程序中使用;如果它在包体中声明,它只能在该包中使用;如果它在包头中声明,则任何对包具有执行访问权限的PL / SQL代码都可以使用它.它绝不能在SQL语句中引用,即使是嵌入在PL / SQL代码中的语句也是如此.
创建对象类型或其他模式级别类型定义(如嵌套表)时,它可在SQL和PL / SQL中使用.作为一个非常简单的示例,您可以基于对象定义创建表定义:
SQL> CREATE OR REPLACE TYPE "TYPE_NAME1" AS OBJECT
2 (
3 temp_trans_id number(10),
4 trans_id number(10),
5 resion_id number(10)
6 )
7 /
Type created.
SQL> create table type_name1_tab of type_name1;
Table created.
SQL> desc type_name1_tab
Name Null? Type
----------------------------------------- -------- ----------------------------
TEMP_TRANS_ID NUMBER(10)
TRANS_ID NUMBER(10)
RESION_ID NUMBER(10)
See here有关CREATE TYPE语句的文档,以及有关对象类型的各种用法的进一步文档的参考.