Имам проблем при опит да използвам израз Execute Immediate
, съдържащ израз CREATE TABLE
и дефиниран от потребителя тип таблица. Получавам грешка ORA-22905
на Oracle 11g.
Има ли някакво решение за разрешаване на този проблем?
CREATE TYPE MY_TABLE_TYPE AS TABLE OF VARCHAR2(30);
/
DECLARE
MT MY_TABLE_TYPE;
BEGIN
SELECT * BULK COLLECT INTO MT FROM DUAL;
-- Two steps
EXECUTE IMMEDIATE 'CREATE TABLE MY_TABLE1 (A VARCHAR2(30))';
EXECUTE IMMEDIATE 'INSERT INTO MY_TABLE1 SELECT * FROM TABLE(:T)' USING MT; -- OK
-- One step
EXECUTE IMMEDIATE 'CREATE TABLE MY_TABLE2 AS SELECT * FROM TABLE(:T)' USING MT; -- ERROR ORA-22905
END;
Истинският код за SELECT * FROM TABLE(:T)
е динамичен (името на основната таблица е временно) и бавен. Ето защо се опитвам да избягвам създаването на таблицата в две стъпки (както е направено с MY_TABLE1
). Също така с две стъпки не мога да използвам SELECT *
, но трябва да посоча всички колони (променлива сума и над 100 колони).