Вложенные таблицы: вставка значений в определенные столбцы вложенной таблицы.

У меня вопрос относительно запроса на вставку для вложенной таблицы. У меня есть такой объект:

 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;

Как вставить в столбцы (row_id,animal_id,attr1) или (row_id,animal_id и attr3) во вложенной таблице с помощью динамического SQL?

Я пробовал что-то вроде этого:

INSERT INTO animals(animal_id,animal_ptr(row_id,animal_id,attr3))
VALUES(1,obj_animals_tab(obj_animals(1,1,'4')));

Это выдало мне ошибку: отсутствует запятая. Можете ли вы сказать мне, как это реализовать? Спасибо!


person Neptune_Runner    schedule 21.01.2017    source источник


Ответы (2)


Оператор 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 как в таблице, так и в объекте.

person Wernfried Domscheit    schedule 21.01.2017
comment
есть идеи, как будет выглядеть синтаксис, если мне нужно вставить значения в нужные мне столбцы? Например, мне не нужно значение для attr1. Я хочу это только для row_id, animal_id, attr3. Мне нужно указать их как null для attr1 и attr2: INSERT INTO animals(animal_id,animal_ptr) VALUES(1,obj_animals_tab(obj_animals(1,1,null,null,'4'))); - person Neptune_Runner; 21.01.2017
comment
Нет, я так не думаю - person Wernfried Domscheit; 22.01.2017

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

Попробуйте это. работает на меня.

person Santhosh Kumar    schedule 14.01.2019