我想用數據創建和填充臨時表來處理它循環語句裏面是這樣的:爲什麼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表中的第一個INSERT或者即使我的EXECUTE IMMEDIATE'CREATE GLOBAL TEMPORARY TABLE ...'語句似乎沒有錯誤地執行,視圖也不存在。我在腳本執行後檢查了表內沒有MY_TEMP表
當我單獨運行EXECUTE IMMEDIATE'CREATE GLOBAL TEMPORARY TABLE ...'時,它運行正常,MY_TEMP表被真正創建。在此之後,整個腳本運行正常。
如何在不手動預先創建MY_TEMP表的情況下使用此腳本?
你好,@DaveH。我已更正我的示例代碼。 – user149691
這不是臨時表在Oracle中的工作方式。創建它們**一次**,然後在您的過程中使用它們 - 就像任何其他表一樣。 –