2015年4月24日金曜日

DS2プロシジャのSQLEXEC関数でSQLを実行する。


SAS9.4で追加されたDS2プロシジャを勉強中です。

データステップがパワーアップした感じのやつなんですが、勝手が違うので、なかなかすんなりと動いてくれないです。。(そこがまた楽しいですが)

今ハマってるのが、DS2プロシジャで用意されているパッケージ(SQLSTMT,HASH,MATRIX,FCMP,LOGGERなど)を使ったデータハンドリングです。

ここはまだ理解しきれてないので置いとくとして、
今回は、DS2プロシジャらしいダイナミックな関数、SQLEXEC関数を使ってみたいと思います。


*** サンプルデータ作成 *************;
data DT1;
   A=1;
   output;
   output;
run;

 A 
  1 
  1  

*** DS2でSQLを実行する **********;
proc ds2;
   data _NULL_;

      method run();
          dcl double rc A2;
          A2 = 2;
          rc = sqlexec( 'update DT1 set A=' || A2 );
          if rc^=0 then put '更新失敗しました';  
      end;
       
   enddata;
   run;
quit;

 A 
  2  
  2 

構文
  SQLEXEC( 'SQL文' )


気を付けること
※ SQL文はシングルクオーテーションで囲む
※ UPDATEやINSERTなど更新・追加・削除・作成をするSQL文じゃないとダメ(単純なSELECT文は動かない)
※ 実行が成功すれば「0」が返される


今回の例では、データセットDT1の変数Aの値を更新するSQLを実行していますが、注目ポイントとしては、以下青字部分。
  A2 = 2;
  rc = sqlexec( 'update DT1 set A=' || A2 );


update DT1 set A=」という文字列と、変数A2の値「2」を結合した文字列をSQL文として実行しています。
使い方によっては、結構いろんなこと出来そうですね。



自分自身の備忘録も兼ねて、いつかDS2プロシジャ入門の記事を書きたいなと思ってます。
需要ないだろって感じですが。

0 件のコメント:

コメントを投稿