Sql 嵌套表:在嵌套表的特定列中插入值
我有一个关于嵌套表的insert查询的问题。我有一个这样的物体: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_
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'));不,我不这么认为