いくつかのクエリを動的に生成する必要がある PL/SQL プロシージャを作成しています。そのうちの 1 つは、パラメータとして取得されたクエリの結果を使用して一時テーブルを作成することです。
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
ます。作成したクエリを手動で実行すると、正しく実行されます。この時点で、問題の原因を特定できます。