У меня есть таблица, в которой один из столбцов является вложенной таблицей.
Я хочу скопировать данные этой таблицы в другую. Как мы сформулируем предложение 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)** ;
Что это делает, так это распаковывает вложенную таблицу. Таким образом, я получаю больше записей, чем хочу - это означает, что если конкретный pat_address_id имел phone_list из 5 комбинаций phone, extn, это дает мне 5 записей, которые я не могу и не должен вставлять.
Итак, вопрос в том, как сохранить гнездо (столбец вложенной таблицы) как есть и вставить его в новую таблицу? Что ж, CTAS может быть одним из вариантов, но для этого требуется совершенно новая таблица вместо INSERT. Любая помощь будет оценена.
INSERT INTO ... tbl_col SELECT tbl_col ...
должен работать без ошибок. Или я упустил какие-то тонкости? - person Sylvain Leroux   schedule 10.10.2014ORA-00904
, а неORA-00932: inconsistent datatypes
илиORA-01031: insufficient privileges
? Таблицы в обеих схемах построены со ссылкой на свой собственный тип объекта/таблицы или общий? - person Alex Poole   schedule 10.10.2014