PL / SQL继承rowtype

时间:2014-08-08 05:55:29

标签: oracle plsql

我知道Oracle PL / SQL允许使用“under”关键字创建对象子类型。但是可以创建一个继承特定表的RowType的子类型吗?

例如,如果有一个名为Customer的表,我想创建一个对象类型,该对象类型在Customer表中包含具有额外字段的所有属性。

我试过了:

create or replace type t_sub_type as object under Customer%RowType (
  price NUMBER
);

当然,代码无法编译。有没有办法实现这个目标?

1 个答案:

答案 0 :(得分:1)

除非customer碰巧是对象表,否则不行。如果customer是常规旧表,则customer%rowtype是记录,而不是对象,因此无法继承。如果您创建了对象类型customer_typ并创建了这些对象类型的表customer,那么您可以创建customer_typ的子类型。像

这样的东西
SQL> ed
Wrote file afiedt.buf

  1  create type customer_typ
  2    as object (
  3      name varchar2(100),
  4      address varchar2(1000),
  5      phone varchar2(30)
  6    )
  7*   not final
SQL> /

Type created.

SQL> create table customer_tbl of customer_typ;

Table created.

SQL> create type subcustomer_typ
  2    under customer_typ (
  3      newColumn number
  4    );
  5  /

Type created.

SQL> desc subcustomer_typ;
 subcustomer_typ extends SCOTT.CUSTOMER_TYP
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 NAME                                               VARCHAR2(100)
 ADDRESS                                            VARCHAR2(1000)
 PHONE                                              VARCHAR2(30)
 NEWCOLUMN                                          NUMBER

当然,我很难想象这会产生很大意义的情况。但这是可能的。如果您可以描述您希望从%rowtype记录继承的原因,我们可能会建议一些替代方法。