ビジネス・インテリジェンス[BI] のリーディング・カンパニー | SAS Japan SAS Japan
「THE POWER TO KNOW(知る力)」を提供するビジネス・インテリジェンス[BI]のリーディング・カンパニー | SAS Japan  トレーニング マニュアル ユーザー事例 パートナー ユーザー会 求人情報 資料請求・ダウンロード
Home News Products & Solutions Events & Seminer Customer Support Company www.sas.com
 

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;

The Power to Know
   Contact Us     Terms of Use & Legal Information     Privacy Statement     個人情報の取り扱いについて   Copyright © 2008 SAS Institute Inc. All Rights Reserved