我有一个关于嵌套表的插入查询的问题。我有一个像这样的对象:
CREATE OR REPLACE TYPE obj_animals as OBJECT (
row_id INTEGER,
animal_id INTEGER,
attr1 VARCHAR2(30),
attr2 VARCHAR2(30),
attr3 VARCHAR2(30)
);
我有这样的表格类型:
CREATE OR REPLACE TYPE obj_animals_tab IS TABLE OF obj_animals;
嵌套表包含在:
中CREATE TABLE animals
(
animal_id INTEGER,
animal_ptr obj_animals_tab
)
NESTED TABLE animals_ptr STORE AS obj_animals_tab;
如何使用动态SQL插入嵌套表中的(row_id,animal_id,attr1)列或(row_id,animal_id& attr3)列?
我试过这样的事情:
INSERT INTO animals(animal_id,animal_ptr(row_id,animal_id,attr3))
VALUES(1,obj_animals_tab(obj_animals(1,1,'4')));
这给我一个错误:缺少逗号。你能告诉我一种实现方法吗?谢谢!
答案 0 :(得分:0)
Insert语句必须如下:
INSERT INTO animals (animal_id, animal_ptr)
VALUES (1, obj_animals_tab(obj_animals(1,1,'4')));
要更新现有值,您可以使用以下语法:
UPDATE
(SELECT t.animal_id as animal_id_T, obj.animal_id as animal_id_OBJ,
attr1, attr2, attr3
FROM animals t
NATURAL JOIN TABLE(obj_animals_tab) obj)
SET attr3 = 'xyz'
WHERE animal_id_T = 1
AND animal_id_OBJ = 1;
在表格和对象类型中使用animal_id
可能不是很聪明。
答案 1 :(得分:0)
INSERT INTO animals(animal_id,animal_ptr(row_id,animal_id,attr3))
VALUES(1,obj_animals_tab(obj_animals(
row_id => 1,
animal_id => 1,
attr3 => '4'
)));
尝试一下。为我工作。