我正在尝试创建一个包含子类型对象的对象超类型表,但是一旦运行,最底行的插入将显示插入的前两个属性SSN和名称。这几天Oracle Express刚坏了吗?还是我的代码有问题?
create or replace type PersonType as object (
SSN number (9),
name varchar2(30))
Instantiable
NOT Final;
create or replace type TenantType under PersonType (
aptNum REF ApartmentType,
phone number(10),
car varchar2(15),
contract varchar2(10));
Instantiable
Final;
create or replace type EmployeeType under PersonType (
empId number(4),
empAdr varchar2(40));
Instantiable
Final;
create table P1 of PersonType (
constraint P1_SSN_pk Primary Key (SSN));
insert into P1 values(TenantType(956785252, 'Jerry Wilson', (select ref(a) from A1 a where aptNum = 110), 8015167895, 'Toyota', '8 months'));
答案 0 :(得分:0)
如果运行简单选择,则会看到超类型的通用值。创建类型时,可以添加成员函数以不同方式显示子类型,也可以使用treat()
:
select treat(value(p) as tenanttype) from p1 p where p.ssn = 956785252
您输入错误(类型定义中不必要的分号),并且缺少ApartmentType
和表a1
的定义,因此这是我的测试数据:dbfiddle
以下是提到的成员函数show()
的示例:Inheritance in SQL Object Types