ACCESS to Oracleのパススルー機能にてWHERE句にマクロ変数を利用する

[OS] ALL
[リリース] ALL
[キーワード] ACCESS, ORACLE, SQL Pass-Thru, WHERE clause, macro variable

[質問]

SQLプロシジャのパススルー機能にてOracleのWHERE句にマクロ変数を利用したいと思っています。
マクロ変数を展開させるためには、複引用符を使用しなければならないことは判っているのですが、OracleのWHERE句は構文上、単引用符を使用しなければなりません。
何か良い方法はありませんか。

復引用符でマクロ変数を指定した例

   WHERE ename="&MACV"

結果としてOracleの構文エラーが発生する

単引用符でマクロ変数を指定した例

   WHERE ename='&MACV'

結果として不適切なWHERE句となる

[回答]

特殊文字をクォートする%STRマクロ関数と%を利用して、単引用符をマークすることで対応可能です。
次のプログラムを参考にしてください。

下記の例では、SQLパススルーのWHERE句に記述する条件式にて、変数名enameの値をマクロ変数&MACVとして定義できるように%STRマクロ関数と%でマクロ変数を定義しています。

例:パススルーSQLでのマクロ変数の使用


  %LET macv=ALLEN;
  PROC SQL;
    CONNECT TO ORACLE(USER=xxx PASSWORD=xxx PATH="@xxx");
    SELECT * FROM CONNECTION TO ORACLE
    ( 
      SELECT COUNT(*) FROM emp WHERE ename=%STR(%'&MACV%')
    );
    DISCONNECT FROM oracle;
  QUIT;