1

SAS for Windows 9.2を使用して、Oracleデータベースに対してかなり大きなクエリを実行しています。このクエリはかなり大きく、WITH句でサブクエリを記述して4回使用しました。これはSQLPLUSとSQLDeveloperで正常に実行されますが、SASを使用して実行すると、プログラムが20分後にハングアップし、ログウィンドウも表示されません。SASを使用したことがなく、続行する方法がわかりませんが、次のオプションを試しました。

  • SASコードファイルを作成し、Windowsファイルシステムにログが書き込まれることを期待してWindowsバッチファイルから実行しましたが、これでも実行されます-間違いなく、ログファイルに何も書き込まれません

誰かが私をここに導くことができますか?ALTLOGコマンドを使用してログファイルをWindowsファイルシステムに書き込んで、正確なエラーメッセージを理解できるようにするにはどうすればよいですか。ちなみに、DBAは、クエリは正常に実行され、行はサーバー側から返されると述べていますが、何らかの理由でSASプログラムはこのデータを表示できません。クエリから約45,000レコードを取得します。

ありがとう

4

1 に答える 1

2

以下の2点に分けて説明します。

1) SAS を使用せずに SAS で既存の Oracle SQL クエリを実行する: 最善の方法は、いわゆる PROC SQL 明示的パススルーに Oracle SQL コードを埋め込むことです。

proc sql;
    connect to oracle as db1 (user=user1 pw=pasw1 path=DB1);
    create table test_table as
    select *
    from connection to db1
        ( /* here we're in oracle */
                  select * from test.table1 where rownum <20 
                )
    ;
    disconnect from db1;
quit;

(別の質問Limiting results in PROC SQLへの私の回答から借用)ポイントは、それをSAS SQLに変換しようとしないことです(試したかどうかはわかりません)。

また、SAS OUTPUTウィンドウに書き込むのではなく、クエリ結果から(例のように)SASテーブルを作成していることを確認してください。

2) ログの取得について: アクションに関するログは通常、アクションが完了すると書き込まれるため、クエリが実際に長時間実行されている場合、中間ログは表示されません。とにかく、ログ バッファリングはバッチ ジョブの既定の設定であるため、ログ メッセージはバッファがいっぱいになると書き込まれます。ログ ファイルにすぐに書き込まれるログ メッセージを取得するには、LOGPARM オプションを設定します。

-LOGPARM= “WRITE=IMMEDIATE” 

反対のオプションは BUFFERED です。

使用されている構成ファイルを見つけるには、SAS セッションで次のように実行します。

proc options option=config;run;

次に、構成ファイルの別の行に上記のオプションを入力します。

于 2012-08-06T20:11:21.760 に答える