嵌套表:将值插入嵌套表的特定列

时间:2017-01-21 01:22:30

标签: sql oracle nested-table

我有一个关于嵌套表的插入查询的问题。我有一个像这样的对象:

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

这给我一个错误:缺少逗号。你能告诉我一种实现方法吗?谢谢!

2 个答案:

答案 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'
)));

尝试一下。为我工作。