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_NAME1
和new_type_name
看起来很相似因为对于对象类型(TYPE_NAME1),您没有利用特定于对象类型的任何东西。 有关更多信息,请参阅the Oracle page on Object Types。