我是一个pl / sql新手。现在我有一个关于oracle 类型 的问题。我看到有两种类型的 类型 :
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;
有什么区别?非常感谢。
答案 0 :(得分: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)
See here获取有关CREATE TYPE语句的文档,以及有关对象类型的各种用法的进一步文档的参考。
答案 1 :(得分:3)
记录类型是一种可以像记录一样使用的类型。它有一组类型字段,但就是这样。 对象类型是相当不同的。它还有一组字段,但它也可以包含可在对象实例的上下文中执行的可执行方法(是的,您也可以使用静态方法)。它类似于Java中的Object。 与我见过的其他面向对象系统的一些(但肯定不是全部)差异:
在您的示例中,TYPE_NAME1
和new_type_name
似乎非常相似,因为对于对象类型(TYPE_NAME1),您没有利用对象类型的任何特定内容。
有关详细信息,请参阅the Oracle page on Object Types。