Sql 嵌套表:在嵌套表的特定列中插入值

Sql 嵌套表:在嵌套表的特定列中插入值,sql,oracle,nested-table,Sql,Oracle,Nested Table,我有一个关于嵌套表的insert查询的问题。我有一个这样的物体: 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_

我有一个关于嵌套表的insert查询的问题。我有一个这样的物体:

 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;
INSERT INTO animals(animal_id,animal_ptr(row_id,animal_id,attr3))
VALUES(1,obj_animals_tab(obj_animals(1,1,'4')));
INSERT INTO animals (animal_id, animal_ptr)
     VALUES (1, obj_animals_tab(obj_animals(1,1,'4')));
我有这样一种桌子类型:

 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;
INSERT INTO animals(animal_id,animal_ptr(row_id,animal_id,attr3))
VALUES(1,obj_animals_tab(obj_animals(1,1,'4')));
INSERT INTO animals (animal_id, animal_ptr)
     VALUES (1, obj_animals_tab(obj_animals(1,1,'4')));
嵌套表包含在以下文件中:

CREATE TABLE animals 
(
     animal_id INTEGER,
     animal_ptr obj_animals_tab
)
 NESTED TABLE animals_ptr STORE AS obj_animals_tab;
如何使用动态SQL在嵌套表中插入(row\u id、animal\u id、attr1)列或(row\u id、animal\u id和attr3)列

我试过这样的方法:

 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;
INSERT INTO animals(animal_id,animal_ptr(row_id,animal_id,attr3))
VALUES(1,obj_animals_tab(obj_animals(1,1,'4')));
INSERT INTO animals (animal_id, animal_ptr)
     VALUES (1, obj_animals_tab(obj_animals(1,1,'4')));

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

Insert语句必须如下所示:

 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;
INSERT INTO animals(animal_id,animal_ptr(row_id,animal_id,attr3))
VALUES(1,obj_animals_tab(obj_animals(1,1,'4')));
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\u id
可能不是很明智。

Insert语句必须如下所示:

 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;
INSERT INTO animals(animal_id,animal_ptr(row_id,animal_id,attr3))
VALUES(1,obj_animals_tab(obj_animals(1,1,'4')));
INSERT INTO animals (animal_id, animal_ptr)
     VALUES (1, obj_animals_tab(obj_animals(1,1,'4')));
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'
)));
要更新现有值,可以使用以下语法:

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\u id
可能不是很明智

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'
)));
试试这个。为我工作


试试这个。为我工作。

如果我需要在需要的列中插入值,你知道语法是什么样子吗?例如,我不想要attr1的值。我只想要排号,动物号,属性3。我需要为attr1和attr2指定它们为null:插入到动物(animal_id,animal_ptr)值(1,obj_animals_选项卡(obj_animals(1,1,null,null,'4'));不,我不知道如果我需要在我需要的列中插入值,语法会是什么样子?例如,我不想要attr1的值。我只想要排号,动物号,属性3。我需要为attr1和attr2指定它们为null:插入到动物(animal_id,animal_ptr)值(1,obj_animals_选项卡(obj_animals(1,1,null,null,'4'));不,我不这么认为