oracle“create or replace type”和“type type_name is ...”的区别是什么

问题描述:

我是一个pl/sql新手。现在我有一个关于oracle的问题类型。我看到有两种类型的:oracle“create or replace type”和“type type_name is ...”的区别是什么

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; 

有什么区别?万分感谢。

除前面的答案外,宣言范围也有很大差异。

当你声明在PL/SQL,这样的类型在你的榜样记录类型,它是从PL/SQL只可用。如果它在本地声明为一个过程或函数,那么它只能在该子程序中使用;如果它是在包体中声明的,则只能在该包中使用;如果它是在包头中声明的,则它可以被任何执行访问包的PL/SQL代码使用。决不能把它在SQL语句中引用,甚至嵌在PL/SQL代码的。

当创建一个对象类型,或其它模式级类型定义如嵌套的表格,它既是SQL和PL/SQL内可用。有关CREATE TYPE语句和对象类型的各种用途,以进一步文档参考文档

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:作为一个非常简单的例子,你可以在对象定义基础表定义。

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

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

在你的榜样,TYPE_NAME1new_type_name看起来很相似因为对于对象类型(TYPE_NAME1),您没有利用特定于对象类型的任何东西。 有关更多信息,请参阅the Oracle page on Object Types