2009-05-19 81 views
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。如果我手動運行創建的查詢,它會正確運行。在這一點上,我能夠確定是什麼導致了這個問題。

+1

我希望proc不會在應用程序的正常運行過程中運行......動態DDL只適用於管理腳本(例如,設置新環境)。 – 2009-05-20 02:34:29

回答

23

試圖失去「;」從您執行立即執行的字符串中。

EXECUTE IMMEDIATE 'CREATE GLOBAL TEMPORARY TABLE tmp_tab AS (' || query || ')'; 
相關問題