2016-05-03 16 views
0

UNIONクエリとIN/ORメソッドに関するいくつかの情報に基づいて、大規模な作業を取り直しました。私は8つのユニオンクエリが9分かかっている間に、1つのクエリを介した前のINステートメントが35分かかりましたので、INステートメントをUNIONクエリに移動することで、RSUBMITクエリをかなりうまく削減できました。SASマクロRSUBMIT UNIONクエリ

これらのIN文の中には、より多くの値が含まれているものがあるため、コードを短縮するためにマクロ機能を使用しようとしましたが、問題が発生しています。

以下の画像はマクロ(個別のクエリ)のスニペットです。すぐに私の問題が表示されます。

enter image description here

*マクロはRSUBMIT以内にコンパイルされているので、私たちは「良いことがあります」...しかし、明らかに赤のテキストは、これはUNION文に基づいて不正な構文のいくつかのタイプであることを私に語っています。

実際には、参照するコードのセクションを実行しましたが、実際には実行されますが、マクロの最初のパラメータで表されるFIRSTクエリ(この場合は 'IDRPR'文字列)、その後の後続のパラメータ/クエリのマクロ呼び出しをすべて実行しません。

私は法的な構文を促進するために、それぞれの "UNION"ステートメントをかっこで囲みようとしました。

enter image description here

をしかし、同じ問題は、上記のように...最初のマクロ呼び出しのための唯一の実行を発生 - 一見すると、私が強化され、エディタには赤いテキストを取得しないので、それが正しく実行できますように思えます。私はここで何が欠けているのでしょうか、これがより良い、より効率的なファッションでどのように実行されるのでしょうか?

答えて

1

SASの構文ハイライトは便利なガイドですが、間違った状況(特にマクロコードの場合)があります。コードが有効かどうかをテストする最良の方法は、コードを実行することです。

私はDB2についてよくわかりませんが、元のコードの問題は、各マクロ呼び出し後に発生するセミコロンであると思われます。

%OPEN_IDR('IDR_PR')をマクロ呼び出しの後にセミコロンなしでコーディングしてみてください。セミコロンはおそらくDB2クエリ構文を壊しています。

+0

あなたは疑問が正しかった、一度 ';'それは1つの巨大なクエリ(すべてのparmsを実行する)として走った....ありがとう! – SMW

1

キーワードUNIONを使用してSQL文を開始することはできません。余分なセミコロンを削除します。