数据类型不一致:预期 REF 在尝试插入数据时出现 .. 错误
Inconsistent datatypes: expected REF got .. error when trying to insert data
长话短说,我想做的是将一些数据插入到 table 中,但我在理解问题所在时遇到了一些问题。我会让代码自己说话。希望你能帮帮我。提前致谢!
CREATE OR REPLACE TYPE Departament IS OBJECT (
deptno NUMBER(2),
dname CHAR(14)
);
/
CREATE OR REPLACE TYPE Employee IS OBJECT (
empno NUMBER(4),
ename CHAR(10),
dept REF Departament,
sal NUMBER(7,2)
) NOT FINAL;
/
CREATE OR REPLACE TYPE Manager UNDER Employee (
nrEmp NUMBER(2)
);
/
CREATE TABLE departament_list AS (SELECT deptno, dname FROM dept);
/
CREATE TABLE manager_list OF Manager;
/
INSERT INTO manager_list VALUES(Manager(7782, 'JOHN', Departament(20, 'TEXAS'), 6000, 2));
这是最后一行的问题我得到以下错误
ORA-00932: inconsistent datatypes: expected REF SYS.DEPARTAMENT got
SYS.DEPARTAMENT.
现在不要误会我的意思,我已经尝试用 select 做整个 select 事情:REF(d) from departament_list d ... 但是我收到另一个错误,说参数数量不正确对于默认构造函数。
也许我做错了,你可以帮助阐明我错在哪里。再次感谢!
这似乎是错误原因:
CREATE TABLE departament_list AS (SELECT deptno, dname FROM dept);
对我有用的步骤:
CREATE TABLE departament_list of Departament;
insert into departament_list values (20, 'Texas');
CREATE TABLE manager_list OF Manager;
INSERT INTO manager_list VALUES(Manager(7782, 'JOHN',
(select ref(d) from departament_list d where deptno=20), 6000, 2));
The OF clause lets you explicitly create an object table of type
object_type. The columns of an object table correspond to the
top-level attributes of type object_type. Each row will contain an
object instance, and each instance will be assigned a unique,
system-generated object identifier when a row is inserted.
数据类型不一致,修改Employee对象定义如下:
CREATE OR REPLACE TYPE Employee IS OBJECT (
empno NUMBER(4),
ename CHAR(10),
dept Departament,
sal NUMBER(7,2)
) NOT FINAL;
/
然后运行插入语句:
SQL> INSERT INTO manager_list VALUES(Manager(7782, 'JOHN', Departament(20, 'TEXAS'), 6000, 2));
1 row created.
SQL>
注意:为了更新员工对象,您需要删除 "manager_list"(table)和删除 "manager"(类型),然后更新员工对象定义,然后创建 "manager_list" 和 "manager" 再次。
长话短说,我想做的是将一些数据插入到 table 中,但我在理解问题所在时遇到了一些问题。我会让代码自己说话。希望你能帮帮我。提前致谢!
CREATE OR REPLACE TYPE Departament IS OBJECT (
deptno NUMBER(2),
dname CHAR(14)
);
/
CREATE OR REPLACE TYPE Employee IS OBJECT (
empno NUMBER(4),
ename CHAR(10),
dept REF Departament,
sal NUMBER(7,2)
) NOT FINAL;
/
CREATE OR REPLACE TYPE Manager UNDER Employee (
nrEmp NUMBER(2)
);
/
CREATE TABLE departament_list AS (SELECT deptno, dname FROM dept);
/
CREATE TABLE manager_list OF Manager;
/
INSERT INTO manager_list VALUES(Manager(7782, 'JOHN', Departament(20, 'TEXAS'), 6000, 2));
这是最后一行的问题我得到以下错误
ORA-00932: inconsistent datatypes: expected REF SYS.DEPARTAMENT got SYS.DEPARTAMENT.
现在不要误会我的意思,我已经尝试用 select 做整个 select 事情:REF(d) from departament_list d ... 但是我收到另一个错误,说参数数量不正确对于默认构造函数。
也许我做错了,你可以帮助阐明我错在哪里。再次感谢!
这似乎是错误原因:
CREATE TABLE departament_list AS (SELECT deptno, dname FROM dept);
对我有用的步骤:
CREATE TABLE departament_list of Departament;
insert into departament_list values (20, 'Texas');
CREATE TABLE manager_list OF Manager;
INSERT INTO manager_list VALUES(Manager(7782, 'JOHN',
(select ref(d) from departament_list d where deptno=20), 6000, 2));
The OF clause lets you explicitly create an object table of type object_type. The columns of an object table correspond to the top-level attributes of type object_type. Each row will contain an object instance, and each instance will be assigned a unique, system-generated object identifier when a row is inserted.
数据类型不一致,修改Employee对象定义如下:
CREATE OR REPLACE TYPE Employee IS OBJECT (
empno NUMBER(4),
ename CHAR(10),
dept Departament,
sal NUMBER(7,2)
) NOT FINAL;
/
然后运行插入语句:
SQL> INSERT INTO manager_list VALUES(Manager(7782, 'JOHN', Departament(20, 'TEXAS'), 6000, 2));
1 row created.
SQL>
注意:为了更新员工对象,您需要删除 "manager_list"(table)和删除 "manager"(类型),然后更新员工对象定义,然后创建 "manager_list" 和 "manager" 再次。