我知道Oracle PL / SQL允许使用“under”关键字创建对象子类型。但是可以创建一个继承特定表的RowType的子类型吗?
例如,如果有一个名为Customer的表,我想创建一个对象类型,该对象类型在Customer表中包含具有额外字段的所有属性。
我试过了:
create or replace type t_sub_type as object under Customer%RowType (
price NUMBER
);
当然,代码无法编译。有没有办法实现这个目标?
答案 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
记录继承的原因,我们可能会建议一些替代方法。