Я хотел бы создать и заполнить временную таблицу с данными для его обработки внутри оператора цикла, как это:Почему блок PL/SQL не создает временную таблицу?
DECLARE
cnt NUMBER;
BEGIN
SELECT COUNT(tname) INTO cnt from tab where tname = 'MY_TEMP';
IF (cnt > 0) THEN
EXECUTE IMMEDIATE 'DROP TABLE MY_TEMP';
END IF;
EXECUTE IMMEDIATE 'CREATE GLOBAL TEMPORARY TABLE MY_TEMP (G NVARCHAR2(128), F NVARCHAR2(128), V NVARCHAR2(128)) ON COMMIT DELETE ROWS';
INSERT INTO MY_TEMP VALUES (N'G-value1', N'F-value1', N'V-value1');
INSERT INTO MY_TEMP VALUES (N'G-value2', N'F-value2', N'V-value2');
...
FOR record IN (SELECT G,F,V FROM MY_TEMP)
LOOP
... Do something sophisticated with record.G, record.F, record.V
END LOOP;
COMMIT;
END;
Когда я запускаю этот скрипт внутри PL-SQL Developer он говорит мне в первую ВСТАВКУ, что MY_TEMP стола или представление не существует, хотя мой EXECUTE IMMEDIATE 'CREATE GLOBAL TEMPORARY TABLE ...' выглядит, как представляется, без ошибок. Я проверил, нет таблицы MY_TEMP внутри списка таблиц после выполнения сценария
Когда я запускаю EXECUTE IMMEDIATE 'CREATE GLOBAL TEMPORARY TABLE ...', он работает нормально, а таблица MY_TEMP действительно создана. После этого все скрипты работают нормально.
Как использовать этот скрипт без ручной обработки таблицы MY_TEMP вручную?
Здравствуйте, @DaveH. Я скорректировал свой пример кода. – user149691
Это не то, как временные таблицы работают в Oracle. Создайте их ** один раз **, а затем используйте их в своей процедуре - как и в любой другой таблице. –