我创建了两个对象 T_PERSONS、T_BUSINESS_PERSON,其中 T_BUSINESS PERSON 是子类型,T_PERSONS 是超类型。
---创建 T_PERSONS 对象---
CREATE OR REPLACE
TYPE T_PERSONS AS OBJECT
( id integer,
first_name varchar2(10),
last_name varchar2(10),
dob DATE,
phone varchar2(12),
address t_address,
) NOT FINAL;
---创建 T_BUSINESS_PERSON 对象---
CREATE TYPE t_business_person UNDER t_persons
(title varchar2(20),
company varchar2(20)
);
现在我创建了一个对象表object_customers
CREATE TABLE object_customers OF t_persons
将数据插入 object_customers
INSERT INTO object_customers VALUES
(t_persons(1,'Jason','Bond','03-APR-1955','800-555-1211',
t_address('21 New Street','Anytown','CA','12345')
));
在这种情况下,数据已正确插入
INSERT INTO object_customers VALUES
(t_business_person(2,'Steve','Edwards','03-MAR-1955','800-555-1212',
t_address('1 Market Street','Anytown','VA','12345'),'Manager','XYZ Corp'
));
现在在这种情况下发生了错误
Error-attribute or element value is larger than specified in type.
请帮忙。
仅当您按如下方式创建表时,第二次插入才会起作用:
CREATE TABLE object_customers OF t_business_person;
单击此处了解有关NOTFINAL 条款的更多信息。
您的设置看起来不错!为了确定起见,删除所有内容并从头开始重新创建类型和表可能会有所帮助。
对于之前的回复:不需要将object_customers定义为t_business_person。由于 t_persons 被标记为 NOT FINAL,因此它已经支持插入任何子类型,包括 t_business_person。如果您将表定义为 t_business_person,则会将该表限制为该特定子类型,从而限制了灵活性。