Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (日本語) » SQL Anywhere サーバ - SQL リファレンス » SQL の使用 » SQL 文 » SQL 文 (E ~ O)

 

EXECUTE IMMEDIATE 文 [SP]

この文は、動的に作成された文をプロシージャの中から実行できるようにします。

構文 1
EXECUTE IMMEDIATE [ execute-option ] string-expression
execute-option:
  WITH QUOTES [ ON | OFF ]
| WITH ESCAPES { ON | OFF }
| WITH RESULT SET { ON | OFF }
構文 2
EXECUTE ( string-expression )
パラメータ
  • WITH QUOTES 句   WITH QUOTES または WITH QUOTES ON を指定すると、文字列式にある二重引用符はすべて識別子を区切るものと見なされます。WITH QUOTES を指定しない場合、または WITH QUOTES OFF を指定する場合、文字列式内の二重引用符は、quoted_identifier オプションの現在の設定に応じて処理されます。

    WITH QUOTES は、ストアド・プロシージャに渡されるオブジェクト名が、実行される文の一部として使用される場合に役立ちます。ただし、名前に二重引用符が必要な場合や、quoted_identifier オプションが Off に設定されているときにプロシージャが呼び出される場合があります。quoted_identifier オプション [互換性]を参照してください。

  • WITH ESCAPES 句   WITH ESCAPES OFF を指定すると、文字列式のエスケープ・シーケンス (\n、\x、\\ など) がすべて無視されます。たとえば、連続する 2 つの円記号は、1 つの円記号に変換されるのではなく、2 つの円記号として残ります。デフォルトの設定は、WITH ESCAPES ON です。

    WITH ESCAPES OFF には、動的に作成された文が円記号を含むファイル名を参照する場合に、この文の実行を容易にするという用途があります。

    コンテキストによっては、string-expression のエスケープ・シーケンスは、EXECUTE IMMEDIATE 文が実行される前に変換されます。たとえば、複合文は実行される前に解析され、WITH ESCAPES の設定にかかわらず、エスケープ・シーケンスがこの解析中に変換されます。これらのコンテキストでは、WITH ESCAPES OFF を指定すると、これ以上は変換されません。次に例を示します。

    BEGIN
       DECLARE String1 LONG VARCHAR;
       DECLARE String2 LONG VARCHAR;
       EXECUTE IMMEDIATE
            'SET String1 = ''One backslash: \\\\ ''';
         EXECUTE IMMEDIATE WITH ESCAPES OFF
            'SET String2 = ''Two backslashes: \\\\ ''';
       SELECT String1, String2
    END

  • WITH RESULT SET 句   WITH RESULT SET ON を指定することによって、EXECUTE IMMEDIATE 文で結果を返すことができます。この句を使用すると、この句を含むプロシージャが結果セットを返すように指定されます。この句を含めない場合、文が結果セットを生成する場合にプロシージャが呼び出されると、エラーがレポートされます。

    注意

    デフォルト・オプションは WITH RESULT SET OFF であり、文の実行時に結果セットが生成されないことを意味します。

備考

EXECUTE 文は、プロシージャとトリガの中から実行できる文の種類を増やします。これを使って、プロシージャに渡されるパラメータを使って作成された文のように、動的に作成された文を実行できます。

文の中のリテラル文字列は、一重引用符で囲みます。また、文は 1 行にしてください。

EXECUTE IMMEDIATE によって実行される文では、グローバル変数だけが参照できます。

Transact-SQL のストアド・プロシージャとトリガでは、構文 2 しか使用できません。

パーミッション

なし。文は、プロシージャの所有者のパーミッションを使って実行されます。プロシージャを呼び出すユーザのパーミッションは使いません。

関連する動作

なし。ただし、文が関連する動作としてのオートコミットを伴うデータ定義文である場合、そのコミットが起こります。

プロシージャにおける EXECUTE IMMEDIATE 文の使用の詳細については、プロシージャでの EXECUTE IMMEDIATE 文の使用を参照してください。

参照
標準と互換性
  • SQL/2003   コア SQL に含まれない SQL/基本機能。

次の文は、テーブル名がパラメータとしてプロシージャに提供されているテーブルを作成します。EXECUTE IMMEDIATE 文はすべて 1 行にしてください。

CREATE PROCEDURE CreateTableProc(
                  IN tablename char(30)
                  )
BEGIN
   EXECUTE IMMEDIATE
   'CREATE TABLE ' || tablename ||
   ' ( column1 INT PRIMARY KEY)'
END;

プロシージャを呼び出して、テーブル mytable を作成します。

CALL CreateTableProc( 'mytable' );

結果セットを返すクエリを使用する EXECUTE IMMEDIATE の例については、プロシージャでの EXECUTE IMMEDIATE 文の使用を参照してください。