SQLプロシジャによって返されるリターンコードについて

[OS]ALL
[リリース] 6.12, 8.1, 8.2
[キーワード] macro, mprint, mfile, program

[質問]

SQLプロシジャには、処理が失敗したときの値を格納する変数があるそうですが、それはどのようなものでしょうか?

[回答]

自動マクロ変数「&SQLRC」がその変数です。自動マクロ変数「&SQLRC」には、SQLプロシジャによって返されるリターンコードが格納されます。処理が正常終了したときは「0」、それ以外の場合には「1」以上の値を返します。

「&SQLRC」の値は、次のいずれかになります(ただし、RDBMSおよびSASの仕様によって、リターンコードの値が異なる場合がありますので、検証を行なってから使用することをおすすめします)。

内容
0 PROC SQLステートメントが正常終了した。
4 PROC SQLステートメントが警告を検出したが、ステートメントは引き続き実行された。
8 PROC SQLステートメントがエラーを検出し、ステートメントの実行はこの時点で中止された。
12 PROC SQLステートメントがPROC SQLのバグを示す内部エラーを検出した。
(このエラーはコンパイル時のみ発生します。)
16 PROC SQLステートメントがユーザエラーを検出した。
(このエラーコードは、単一の値しか返せないサブクエリーが複数行を評価する場合などに使用します。また、このエラーは実行時のみ発生します。)
24 PROC SQLステートメントがシステムエラーを検出した。
(このエラーコードは、ディスクがいっぱいであるためにSASデータセットへの書出しができない場合などに使用します。また、このエラーは実行時のみ発生します。)
28 PROC SQL ステートメントが PROC SQL のバグを示す内部エラーを検出した。
(このエラーは実行時のみ発生します。)

■ &SQLRCの使用例

この例では、存在しないDB2テーブル「emp」から、新しいテーブル「samptbl」を作成しようとしているため、マクロ変数「&SQLRC」には「8」という値が格納されます。

    proc sql;
      connect to db2 (db=sampdb user=userid password=passwd);
      create table samptbl as select * from connection to db2
     ( select * from emp  );
      %put &sqlrc;
    quit;