Я собираюсь узнать pl/sql, и в настоящее время я не понимаю, что происходит с моим кодом. То, что я пытаюсь сделать, - это динамически копировать (резервировать) определенную таблицу. Так легко: я уже создал backupTable, потому что я буду использовать это довольно часто на самом деле. Поэтому первая попытка была следующей:Как динамически копировать таблицу с LONG-типом данных в динамическом sql?
EXECUTE IMMEDIATE 'INSERT INTO '||sSchema_||'.backupTable
SELECT * FROM '||sSchema_||'.table'
Это не работает, как один из столбцов содержит LONG тип данных
Exception ORA-00997: illegal use of LONG datatype
Так что следующий шаг пытается упаковать вещи в петлю и выборки каждой строки индивидуально:
--Initialized as
TYPE cur_typ IS REF CURSOR;
cCursor cur_typ;
rRecord table%rowtype;
--Make sure cursor is closed
IF cCursor%ISOPEN THEN
CLOSE cCursor;
END IF;
--Run the copying
OPEN cCursor FOR 'SELECT * FROM '||sSchema_||'.table';
LOOP
FETCH cCursor INTO rRecord;
EXIT WHEN cCursor%NOTFOUND;
EXECUTE IMMEDIATE 'INSERT INTO '||sSchema_||'.updateTable 'VALUES rRecord';
END LOOP;
CLOSE cCursor;
Который не выполняется из-за:
ORA-03001: unimplemented feature
После этого я попытался использовать другие способы записи этого цикла, например.
EXECUTE IMMEDIATE 'INSERT INTO '||sSchema_||'.updateTable 'VALUES :1' USING rRecord;
Все с одинаковым результатом: нереализованная характеристика.
Итак, возникает вопрос: как создать динамическую копию таблиц, содержащих LONG-тип данных? Кто-нибудь есть идеи?
Спасибо Тип много заранее
Донни
Большое спасибо за ваши советы: Но 3 вещи приходят на ум: База данных Я работаю с огромна, таким образом, я не могу изменить тип данных. Во-вторых, таблица состоит из многих столбцов, поэтому я хотел бы использовать% rowtype для создания записи. И, в-третьих, я думаю, проблема на самом деле заключается в составлении EXECUTE IMMEDIATE и записи im, пытающейся скопировать в таблицу. (Запись без немедленного выполнения выполняется, а немедленное выполнение без записи тоже ...). Так что, на самом деле, я думаю, что это ошибка оракула, и я пытаюсь найти способ обойти это ... – Donny