oracle"创建或替换类型"和"类型type_name是..."语法之间的区别是什么

Jus*_*ner 4 sql oracle types plsql

我是一个pl/sql新手.现在我有一个关于oracle 类型的问题.我看到有两种类型:

CREATE OR REPLACE TYPE "TYPE_NAME1" AS OBJECT
(
    temp_trans_id           number(10),
    trans_id                number(10),
    resion_id               number(10)
)
Run Code Online (Sandbox Code Playgroud)

要么

type new_type_name is record(
    column1 number,
    column2 varchar2(50)
);
variable_name new_type_name;
Run Code Online (Sandbox Code Playgroud)

有什么不同?十分感谢.

Dav*_*sta 7

除了上一个答案之外,声明的范围也存在重大差异.

在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)
Run Code Online (Sandbox Code Playgroud)

有关 CREATE TYPE语句的文档以及有关对象类型的各种用法的进一步文档的参考,请参见此处.