SET PASSTHRU ステートメント

SET PASSTHRU ステートメントは、データ・ソースのネイティブ SQL を、 直接そのデータ・ソースに送信するセッションをオープンおよびクローズします。

このステートメントは、トランザクションの制御下にはありません。

呼び出し

このステートメントは、対話式に発行することができます。 このステートメントは、動的に作成できる実行可能ステートメントです。

許可

このステートメントの許可 ID が持つ特権には、以下の事柄を行う許可がなければなりません。
  • データ・ソースにパススルーする
  • データ・ソースでのセキュリティーの制限を満たす

構文

Read syntax diagramSkip visual syntax diagramSET PASSTHRUserver-nameRESET

説明

server-name
パススルー・セッションをオープンするデータ・ソースを指定します。 server-name (サーバー名) は、 カタログに記述されているデータ・ソースを指定していなければなりません。
RESET
パススルー・セッションをクローズします。

  • Microsoft SQL Server、 Sybase、および Oracle のデータ・ソースには、以下の制限が適用されます。
    • ユーザー定義トランザクションは、パススルー・モードの Microsoft SQL Server および Sybase データ・ソースには使用できません。これは、 Microsoft SQL Server および Sybase により、ユーザー定義トランザクション内で指定できる SQL ステートメントが制限されるためです。 パススルー・モードで処理される SQL ステートメントはデータベース・マネージャーによって構文解析されないので、ユーザーが指定した SQL ステートメントがユーザー定義のトランザクションで使用できるかどうかを検出できません。
    • COMPUTE 節は、 Microsoft SQL Server および Sybase データ・ソースではサポートされていません。
    • DDL ステートメントは、 Microsoft SQL Server、 Oracle 、および Sybase データ・ソース上のトランザクション・セマンティクスの対象ではありません。 操作が完了すると、 Microsoft SQL Server、 Oracle 、または Sybaseによって自動的にコミットされます。 ロールバックが起きても、DDL はロールバックされません。

  • 例 1: データ・ソース BACKEND に対するパススルー・セッションを開始します。
       strcpy (PASS_THRU,"SET PASSTHRU BACKEND");
       EXEC SQL EXECUTE IMMEDIATE :PASS_THRU;
  • 例 2: PREPARE ステートメントを使ってパススルー・セッションを開始します。
       strcpy (PASS_THRU,"SET PASSTHRU BACKEND");
       EXEC SQL PREPARE STMT FROM :PASS_THRU;
       EXEC SQL EXECUTE STMT;
  • 例 3: パススルー・セッション終了します。
       strcpy (PASS_THRU_RESET,"SET PASSTHRU RESET");
       EXEC SQL EXECUTE IMMEDIATE :PASS_THRU_RESET;
  • 例 4: PREPARE および EXECUTE ステートメントを使って、 パススルー・セッションを終了します。
       strcpy (PASS_THRU_RESET,"SET PASSTHRU RESET");
       EXEC SQL PREPARE STMT FROM :PASS_THRU_RESET;
       EXEC SQL EXECUTE STMT;
  • 例 5: データ・ソースに移動するセッションをオープンし、 このデータ・ソースにある表のクラスター索引を作成し、 それからパススルー・セッションを終了します。
       strcpy (PASS_THRU,"SET PASSTHRU BACKEND");
       EXEC SQL EXECUTE IMMEDIATE :PASS_THRU;
       EXEC SQL PREPARE STMT                 pass-through mode
         FROM "CREATE UNIQUE
               CLUSTERED INDEX TABLE_INDEX
               ON USER2.TABLE               table is not an
               WITH IGNORE DUP KEY";         alias
       EXEC SQL EXECUTE STMT;
       strcpy (PASS_THRU_RESET,"SET PASSTHRU RESET");
       EXEC SQL EXECUTE IMMEDIATE :PASS_THRU_RESET;