2015-05-02 43 views
1

长话短说,我试图做的是将一些数据插入表中,并且我在理解错误的时候遇到了一些问题。我会让代码为自己说话。希望你能帮助我。提前致谢!不一致的数据类型:预期的REF在尝试插入数据时遇到了错误

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的问题:不一致的数据类型:预期REF SYS.DEPARTAMENT了 SYS.DEPARTAMENT。

现在不要误解我我已经尝试做整个选择thingy:REF(d)from departament_list d ...但我得到另一个错误,说默认构造函数的参数数量不正确。

也许我这样做的方式不对,你可以帮我弄清楚我误解的地方。再次感谢!

+0

你可以显示你使用REf(d)的版本和确切的错误吗? –

+0

不应该是这行:'CREATE TABLE departament_list AS(SELECT deptno,dname FROM dept);' 'CREATE TABLE departament_list AS(SELECT deptno,dname FROM Department'); – Typo

+0

@Typo - 从列名看起来它基于旧的scott emp/dept模式,而不是具有部门的hr模式?尽管如此,不要认为这与问题有关。 –

回答

2

这似乎是错误原因:

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)); 

documentation

该条款让你明确地创建一个对象 object_type表。对象表的列对应于object_type类型的顶级属性 。每行将包含一个对象实例,并且当插入一行时,每个实例将被分配一个唯一的 系统生成的对象标识符。

+0

感谢您的帮助! – districktt

0

数据类型不一致,只需修改Employee对象的定义如下:

CREATE OR REPLACE TYPE Employee IS OBJECT (
    empno NUMBER(4), 
    ename CHAR(10), 
    dept Departament, 
    sal NUMBER(7,2) 
) NOT FINAL; 
/

然后运行INSERT语句:

SQL> INSERT INTO manager_list VALUES(Manager(7782, 'JOHN', Departament(20, 'TEXAS'), 6000, 2)); 

1 row created. 

SQL> 

注:为了更新员工的对象,你将需要删除“manager_list”(表)并放下“manager”(类型),然后更新员工对象定义,然后再次创建“manager_list”和“manager”。

相关问题