Sql “oracle”和“oracle”之间的区别是什么;“创建或替换类型”;及;类型“U名称为…”;语法

Sql “oracle”和“oracle”之间的区别是什么;“创建或替换类型”;及;类型“U名称为…”;语法,sql,oracle,plsql,types,Sql,Oracle,Plsql,Types,我是pl/sql新手。现在我有一个关于oracle类型的问题。我看到有两种类型的类型: CREATE OR REPLACE TYPE "TYPE_NAME1" AS OBJECT ( temp_trans_id number(10), trans_id number(10), resion_id number(10) ) 或 有什么区别?非常感谢。记录类型是一种可以像记录一样使用的类型。它有一

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

CREATE OR REPLACE TYPE "TYPE_NAME1" AS OBJECT
(
    temp_trans_id           number(10),
    trans_id                number(10),
    resion_id               number(10)
)


有什么区别?非常感谢。

记录类型是一种可以像记录一样使用的类型。它有一组类型化字段,但仅此而已。 对象类型是完全不同的。它也有一组字段,但也可以包含在对象实例上下文中起作用的可执行方法(是的,也可以有静态方法)。它类似于Java中的对象。 我已经看到了与其他面向对象系统的一些(但肯定不是全部)差异:

  • 没有接口
  • 没有私有方法
在您的示例中,
TYPE\u NAME1
new\u-TYPE\u-name
看起来非常相似,因为对于对象类型(TYPE\u-NAME1),您没有利用对象类型特有的任何优势。
有关更多信息,请参阅。

除了前面的答案外,声明的范围也存在重大差异

当您在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)
有关CREATETYPE语句的文档,以及有关对象类型各种用法的进一步文档的参考

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)