如何向引用对象的列插入数据?ORA-00932报错疑问
问题分析与解决方案
你的错误原因很明确:col2 定义为 REF obj2 类型,它需要的是指向obj2类型对象的引用,而你直接插入了obj2的实例,类型不匹配导致ORA-00932错误。
不需要只能用PL/SQL实现,纯SQL也可以完成插入,关键是要先创建存储obj2对象的对象表,再从该表中获取对象的引用(REF)插入到tbl2。
正确操作步骤
- 创建对象类型和对象表
CREATE OR REPLACE TYPE obj2 IS OBJECT(e1 VARCHAR2(20), e2 VARCHAR2(20)); / -- 创建存储obj2对象的对象表 CREATE TABLE obj2_table OF obj2;
- 先向对象表插入obj2实例
INSERT INTO obj2_table VALUES(obj2('aa','aa'));
- 从对象表中获取REF插入到tbl2
-- 方式1:通过查询获取对应对象的REF INSERT INTO tbl2 VALUES('aa', (SELECT REF(o) FROM obj2_table o WHERE o.e1 = 'aa' AND o.e2 = 'aa')); -- 方式2:如果对象表有主键,可直接使用REF(表名)获取刚插入的对象引用 -- 先给对象表加主键 ALTER TABLE obj2_table ADD PRIMARY KEY(e1); -- 插入后直接获取REF INSERT INTO obj2_table VALUES('bb','bb'); INSERT INTO tbl2 VALUES('bb', REF(obj2_table));
补充说明
REF类型本质是指向对象表中某一行的指针,必须依赖对象表存在,不能直接用对象实例赋值。- 如果你想用PL/SQL实现,逻辑也是先插入对象到对象表,再获取REF插入目标表,和SQL方式核心逻辑一致,并非必须用PL/SQL。
内容的提问来源于stack exchange,提问作者Erik
相关产品推荐
相关产品推荐

