【问题标题】:what is the difference between oracle "create or replace type" and "type type_name is..." syntaxoracle“创建或替换类型”和“type type_name is ...”语法有什么区别
【发布时间】:2010-12-12 21:21:24
【问题描述】:

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

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

或

type new_type_name is record(
    column1 number,
    column2 varchar2(50)
);
variable_name new_type_name;

有什么区别?非常感谢。

【问题讨论】:

    标签: sql oracle plsql types


    【解决方案1】:

    除了前面的答案,声明的范围有很大的不同。

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

    【讨论】:

      【解决方案2】:

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

      • 没有接口
      • 没有私有方法

      在您的示例中,TYPE_NAME1 和 new_type_name 看起来非常相似,因为对于对象类型 (TYPE_NAME1),您没有利用任何特定于对象类型的东西。 请参阅the Oracle page on Object Types 了解更多信息。

      【讨论】:

        猜你喜欢
        • 2020-03-04
        • 2015-07-17
        • 2015-10-04
        • 1970-01-01
        • 1970-01-01
        • 2015-04-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多