7
我正在編寫一個需要動態生成某些查詢的PL/SQL過程,其中一個涉及使用作爲參數的查詢結果創建臨時表。爲什麼使用EXECUTE IMMEDIATE運行此查詢會導致失敗?
CREATE OR REPLACE PROCEDURE sqlout(query IN VARCHAR2)
IS
BEGIN
EXECUTE IMMEDIATE 'CREATE GLOBAL TEMPORARY TABLE tmp_tab AS (' || query || ');';
END;
它編譯正確,但即使很簡單的查詢,如與:
BEGIN
sqlout('SELECT * FROM DUAL');
END;
它拋出ORA-00911: invalid character
。如果我手動運行創建的查詢,它會正確運行。在這一點上,我能夠確定是什麼導致了這個問題。
我希望proc不會在應用程序的正常運行過程中運行......動態DDL只適用於管理腳本(例如,設置新環境)。 – 2009-05-20 02:34:29