У меня есть таблица, которая имеет один из своих столбцов в виде вложенной таблицы.Как скопировать данные из таблицы с вложенным столбцом таблицы
Я хочу скопировать данные этой таблицы в другую. Как мы создаем предложение INSERT для этого, кажется сложным:
Рассмотрите. Поле, которое представляет собой вложенную таблицу, - это phone_list, тип которого является определяемым пользователем типом «TBL_PHONE_EXTN», который является таблицей «typ_phone_extn».
CREATE OR REPLACE TYPE typ_phone_extn AS OBJECT
(phone_number VARCHAR2 (20), extension VARCHAR2 (10));
/
CREATE OR REPLACE TYPE tbl_phone_extn AS TABLE OF typ_phone_extn;
/
Очевидно ниже не удается: (с ORA-00904:: неверный идентификатор)
INSERT INTO sch2.sub_pat_address (
pat_address_id,
pat_id,
**phone_list,**
last_updated_by
)
SELECT pat_address_id,
pat_id,
**phone_list,**
last_updated_by
FROM sch1.sub_pat_address ;
Так я попробовать:
SELECT pat_address_id,
pat_id,
**tbl_phone_extn(typ_phone_extn (phone_number,extension)),**
last_updated_by
FROM sch1.sub_pat_address, **table(phone_list)** ;
Что это делает unnest вложенной таблицы. Поэтому я получаю больше записей, чем хочу - это означает, что если у определенного pat_address_id был phone_list из 5 телефонов, комбинация extn дает мне 5 записей, которые я не могу и не должен вставлять.
Вопрос в том, как сохранить гнездо (вложенную таблицу столбцов) как есть и вставить в новую таблицу? Ну, CTAS может быть одним из вариантов, но для него требуется целая новая таблица вместо INSERT. Любая помощь будет оценена.
Как были созданы ваши таблицы? 'INSERT INTO ... tbl_col SELECT tbl_col ...' _should_ работать без ошибок. Или я пропустил некоторые тонкости? –
У вас есть 'ORA-00904', а не' ORA-00932: непоследовательные типы данных' или 'ORA-01031: недостаточные привилегии'? Являются ли таблицы в обеих построенных схемах ссылкой на их собственный тип объекта/таблицы или общий? –