2009-05-19 1 views
7

いくつかの問合せを動的に生成する必要があるPL/SQLプロシージャを作成しています。その1つは、パラメータとして取られた問合せの結果を使用して一時表を作成することです。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; 

ITはORA-00911: invalid characterをスローします。作成したクエリを手動で実行すると、正しく実行されます。この時点で、問題の原因を特定することができます。

+1

私はprocは、アプリケーションによってイベントの通常の過程で実行されていないことを願って...ダイナミックDDL(例えば、新しい環境をセットアップ)管理スクリプトのだけは本当に適切です。 –

答えて

23

";"即時実行する文字列の内側から。

EXECUTE IMMEDIATE 'CREATE GLOBAL TEMPORARY TABLE tmp_tab AS (' || query || ')'; 
関連する問題