【问题标题】:Nested tables: Insert values into specific columns of nested table嵌套表:将值插入到嵌套表的特定列中
【发布时间】:2017-01-21 01:22:30
【问题描述】:

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

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

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

【问题讨论】:

    标签: sql oracle nested-table


    【解决方案1】:

    插入语句必须是这样的:

    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 可能不是很聪明。

    【讨论】:

    • 知道如果我需要将值插入到我需要的列中,语法会是什么样子吗?例如,我不想要 attr1 的值。我只希望它用于 row_id、animal_id、attr3。我需要为 attr1 和 attr2 指定它们为 null:INSERT INTO animals(animal_id,animal_ptr) VALUES(1,obj_animals_tab(obj_animals(1,1,null,null,'4')));
    • 不,我不这么认为
    【解决方案2】:
    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'
    )));
    

    试试这个。为我工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多