SQL プロシジャ
PROC SQL ステートメント
PROC SQLステートメント
| 制限事項: | このプロシジャは、CASサーバーではサポートされません。 |
|---|
構文
オプション引数の要約
Control execution
CONSTDATETIME | NOCONSTDATETIME
DQUOTE=ANSI | SAS
ERRORSTOP | NOERRORSTOP
EXEC | NOEXEC
EXITCODE
INOBS=n
IPASSTHRU | NOIPASSTHRU
LOOPS=n
OUTOBS=n
PROMPT | NOPROMPT
REDUCEPUT=ALL | NONE | DBMS | BASE
REDUCEPUTOBS=n
REDUCEPUTVALUES=n
REMERGE | NOREMERGE
STIMER | NOSTIMER
STOPONTRUNC
THREADS | NOTHREADS
UNDO_POLICY=NONE | OPTIONAL | REQUIRED
Control output
DICTDIAG | NODICTDIAG
DOUBLE | NODOUBLE
FEEDBACK | NOFEEDBACK
FLOW<=n <m>> | NOFLOW
NUMBER | NONUMBER
PRINT | NOPRINT
SORTMSG | NOSORTMSG
SORTSEQ=sort-table | LINGUISTIC
UBUFSIZE=n | nK | nM | nG
WARNRECURS | NOWARNRECURS
Debugging
_METHOD
_TREE
オプション引数
_METHOD
PROC SQLがSQLクエリで使用した実行メソッドの階層を表示します。各ステップはコードで識別され、SASログに表示されます。
| 操作 | _METHODオプションを使用する場合は、MSGLEVEL=Iシステムオプションを指定します。 |
|---|---|
| 例 |
NOTE: SQL execution methods chosen are:
sqxslct
sqxsort
sqxsumg
sqxsort
sqxsrc( COUNTRIES )
|
_TREE
SQLクエリがどのように実行されたかを階層的に表示します。
| 例 |
Tree as planned.
/-SYM-V-(countries.Continent:5 flag=00000001)
/-OBJ----|
| \-SYM-A-(TotPop:1 flag=00000039)
/-AGGR---|
| | /-SYM-V-(countries.Population:3 flag=
00000001)
| | /-OBJ----|
| | | \-SYM-V-(countries.Continent:5 flag=
00040001)
| |--SRC----|
| | |--TABL[SQL].countries opt=''
| | | /-NAME--(Population:3)
| | \-CGT----|
| | \-LITN(1000000)
| |--empty-
| |--empty-
| |--empty-
| |--empty-
| | /-SYM-A-(TotPop:1 flag=00000039)
| | /-ASGN---|
| | | \-SYM-G-(#TEMG001:1 stat=8,0 from
Population(0,0))
| |--OBJE---|
| |--empty-
| | /-SYM-G-(#TEMG001:1 stat=8,0 from Population(0,0))
| |--TLST---|
| | /-SYM-S-(Population:2 ss=0220x)
| \-SLST---|
--SSEL---|
|
|---|
CONSTDATETIME | NOCONSTDATETIME
SQLプロシジャがクエリを実行する前に、クエリ内のDATE関数、TIME関数、DATETIME関数、TODAY関数への参照を等価の定数値で置き換えるかどうかを指定します。これらの値を一度計算すると、クエリで関数を複数回使用した場合、またはクエリが日付や時刻の境界近くで関数を実行した場合に結果の一貫性が保たれます。
NOCONSTDATETIMEオプションを設定すると、PROC SQLは、オブザベーションを処理するたびにクエリ内のこれらの関数を評価します。
| デフォルト | CONSTDATETIME |
|---|---|
| 操作 | CONSTDATETIMEオプションとREDUCEPUT=オプションの両方が指定された場合、PROC SQLは、PUT関数値を決定するために、クエリを実行する前にDATE関数、TIME関数、DATETIME関数、TODAY関数を、それぞれの値で置き換えます。 |
| ヒント | あるいは、SQLCONSTDATETIMEシステムオプションを設定することもできます。SQLCONSTDATETIMEシステムオプションで指定した値は、PROC SQL CONSTDATETIMEオプションが設定されない限り、すべてのSQLプロシジャステートメントに対して有効です。CONSTDATETIMEオプションの値は、SQLCONSTDATETIMEシステムオプションよりも優先されます。RESETステートメントを使用して、CONSTDATETIMEオプションを設定またはリセットすることもできます。ただし、CONSTDATETIMEオプションの値を変更しても、SQLCONSTDATETIMEシステムオプションの値は変更されません。詳細については、SQLCONSTDATETIME システムオプションを参照してください。 |
DICTDIAG | NODICTDIAG
レポートに診断列を作成するかどうかを指定します。レポートの診断列には、開くことができなかった各DICTIONARYテーブルのメッセージが含まれています。
| デフォルト | NODICTDIAG |
|---|
DOUBLE | NODOUBLE
レポートの行間を2行に設定するかどうかを指定します。
| デフォルト | NODOUBLE |
|---|---|
| 例 | 2つのテーブルを組み合わせる |
DQUOTE=ANSI | SAS
PROC SQLが二重引用符(" ")で囲まれた値を変数として扱うか文字列として扱うかを指定します。DQUOTE=ANSIを指定すると、PROC SQLは、二重引用符で囲まれた値を変数として扱います。この機能によって、次の値をテーブル名、列名または別名として使用できるようになります。
- AS、JOIN、GROUPなどの予約語。
- 通常はSASで許可されない、DBMS名などの名前。
二重引用符で囲まれた値には、任意の文字を含めることができます。
DQUOTE=SASを指定すると、二重引用符で囲まれた値は文字列として扱われます。
| デフォルト | SAS |
|---|
ERRORSTOP | NOERRORSTOP
PROC SQLでエラーが発生した場合に、PROC SQLが実行を停止するかどうかを指定します。バッチまたは非対話型セッションにおいてERRORSTOPを指定すると、PROC SQLは、エラーが発生するとステートメントの実行を停止しますが、構文のチェックは続行します。
NOERRORSTOPを指定すると、PROC SQLは、エラーが発生した後もステートメントを実行し、構文のチェックを続行します。
| デフォルト | 対話型SASセッションでのNOERRORSTOP、バッチまたは非対話型セッションでのERRORSTOP |
|---|---|
| 操作 | このオプションは、EXECオプションが有効な場合にのみ有効です。 |
| ヒント | ERRORSTOPは、SASがバッチまたは非対話型実行モードで実行している場合にのみ有効です。 |
| NOERRORSTOPは、エラー発生後もバッチジョブにSQLプロシジャステートメントの実行を継続させる場合に役立ちます。 |
EXEC | NOEXEC
構文が正確かを確認した後、ステートメントを実行するかどうかを指定します。
| デフォルト | EXEC |
|---|---|
| ヒント | NOEXECは、ステートメントを実行しないでSQLステートメントの構文を確認する場合に役立ちます。 |
| 参照項目: | エラーストップ |
EXITCODE
PROC SQLがすべてのSQLステートメントのエラーコードをクリアすることを指定します。エラーコードはSQLEXITCODEマクロ変数に割り当てられています。
| デフォルト | 0 (エラーコードはクリアされません。) |
|---|---|
| ヒント | 終了コードは、PROC SQLステートメントの間で、RESET ステートメントを使用して、デフォルト値にリセットできます。 |
| 参照項目: | PROC SQL自動マクロ変数の使用 |
FEEDBACK | NOFEEDBACK
ビューの参照が展開された後、または特定の他のステートメント変換が実行された後に、PROC SQLがSASログにPROC SQLステートメントを表示するかどうかを指定します。
このオプションには次の効果があります。
- 任意のアスタリスク(たとえば、
SELECT *) が、それが表す修飾された列のリストに展開されます。 - PROC SQLビューが、その元になるクエリに展開されます。
- マクロ変数が解決されます。
- すべての式の前後にかっこが表示され、それらの式の評価順序が詳細に示されます。
- コメントが削除されます。
| デフォルト | NOFEEDBACK |
|---|
FLOW<=n <m>> | NOFLOW
n個よりも長い文字の列が複数行に改行されることを指定します。PROC SQLは、列の幅をnに設定し、n個よりも長い文字の列を複数行に改行することを指定します。FLOW=n mを指定した場合、PROC SQLは、適切なレイアウトを得るために、これらの値の範囲内で列の幅を調整します。引数なしでFLOWを指定した場合は、FLOW=12 200を指定した場合と同じになります。
| デフォルト | NOFLOW |
|---|
INOBS=n
PROC SQLが1つのソースから検索する行(オブザベーション)の数を制限します。
| ヒント | INOBS=は、大きなテーブルに関するクエリのデバッグを行う場合に役立ちます。 |
|---|
IPASSTHRU | NOIPASSTHRU
暗黙のパススルーを有効にするか無効にするかを指定します。
PROC SQLを呼び出すときに、暗黙のパススルーが有効になります。1つのクエリまたは一連のクエリに対して、これを無効にできます。暗黙のパススルーを無効にしたほうがよい場合の主な理由は次のとおりです。
- DBMSはSQL2のNULL値の意味を使用し、その動作はSASの欠損値とはやや異なります。
- PROC SQLのクエリ最適化処理が改善する場合があります。
| デフォルト | IPASSTHRU |
|---|---|
| 参照項目: | DBMSのパススルー機能に関するドキュメントについては、SAS/ACCESS for Relational Databases: リファレンスを参照してください。 |
LOOPS=n
PROC SQLでの内部ループの反復回数をnに制限します。ループ回数を知るには、それぞれのSQLステートメントの実行後にSQLOOPSマクロ変数でレポートされる反復回数を使用します。制限を設定することによって、クエリがコンピューターリソースを過剰に使用しないようにします。たとえば、結合の一致条件を満たさない3つの大きなテーブルを結合しようとすると、巨大な内部テーブルが作成されて、実行の効率が悪くなる場合があります。
| 参照項目: | PROC SQL自動マクロ変数の使用 |
|---|
NUMBER | NONUMBER
SELECTステートメントがROWと呼ばれる列を含むかどうかを指定します。ROWは、行を検索するときのデータの行(またはオブザベーション)番号です。
| デフォルト | NONUMBER |
|---|---|
| 例 | 2つのテーブルを結合する |
OUTOBS=n
出力の行(オブザベーション)の数を制限します。たとえば、OUTOBS=10を指定し、クエリ式を使用して値をテーブルに挿入した場合、SQLプロシジャは最大で10行を挿入します。同様に、OUTOBS=10によって出力は10行に制限されます。
PRINT | NOPRINT
SELECTステートメントの結果を出力するかどうかを指定します。
| デフォルト | |
|---|---|
| 操作 | NOPRINTは、SQLOBS自動マクロ変数の値に影響を与えます。詳細については、PROC SQL自動マクロ変数の使用を参照してください。 |
| ヒント | NOPRINTは、テーブルから値を選択してそれをマクロ変数に入力し、何も表示しないようにする場合に役立ちます。 |
PROMPT | NOPROMPT
INOBS=オプション、OUTOBS=オプションおよびLOOPS=オプションの影響を変更します。PROMPTオプションを指定した場合、INOBS=、OUTOBS=またはLOOPS=で指定した制限に達すると、PROC SQLは、停止または続行を選択するためのプロンプトを表示します。プロンプトは、同じ上限に達するたびに繰り返し表示されます。
| デフォルト | NOPROMPT |
|---|
REDUCEPUT=ALL | NONE | DBMS | BASE
クエリでのPUT関数の最適化に使用されるエンジンタイプを指定します。PUT関数は、論理的に等価な式で置き換えられます。エンジンタイプには、次のいずれかの値を指定できます。
ALL
すべてのPUT関数の最適化を考慮することを指定します。これは、クエリがデータのアクセスにどのエンジンを使用するかにかかわりません。
NONE
どのPUT関数も最適化しないことを指定します。
DBMS
SAS/ACCESSエンジンが実行するクエリ内のすべてのPUT関数について最適化を考慮することを指定します。
| 要件 | PUT関数に渡す最初の引数は、テーブルから取得される変数である必要があります。テーブルには、SAS/ACCESSエンジンを使用してアクセスする必要があります。 |
|---|
BASE
SAS/ACCESSエンジンまたはBase SASエンジンが実行するクエリ内のすべてのPUT関数について最適化を考慮することを指定します。
| デフォルト | DBMS |
|---|---|
| 操作 | REDUCEPUT=オプションとCONSTDATETIMEオプションの両方が指定された場合、PROC SQLは、PUT関数値を決定するために、クエリを実行する前にDATE関数、TIME関数、DATETIME関数、TODAY関数をそれぞれの値で置き換えます。 |
| クエリにWHERE句またはHAVING句も含まれる場合、WHERE句またはHAVING句の評価が簡略化されます。 | |
| ヒント | あるいは、SQLREDUCEPUT=システムオプションを設定することもできます。SQLREDUCEPUT=システムオプションで指定した値は、REDUCEPUT=オプションが設定されない限り、すべてのSQLプロシジャステートメントに対して有効です。REDUCEPUT=オプションの値は、SQLREDUCEPUT=システムオプションよりも優先されます。RESETステートメントを使用して、REDUCEPUT=オプションを設定またはリセットすることもできます。ただし、REDUCEPUT=オプションの値を変更しても、SQLREDUCEPUT=システムオプションの値は変更されません。詳細については、SQLREDUCEPUT= システムオプションを参照してください。 |
REDUCEPUTOBS=n
REDUCEPUT=オプションをDBMS、BASEまたはALLに設定した場合、PROC SQLがクエリ内のPUT関数の最適化を考慮するためにテーブルに存在する必要のあるオブザベーションの最小数を指定します。
| デフォルト | 0。これは、PROC SQLがPUT関数を最適化するために使用するテーブル内のオブザベーションの最小数がないことを示します。 |
|---|---|
| 範囲 | 0-263–1、または約920京 |
| 要件 | nは、整数でなければなりません |
| 操作 | REDUCEPUTOBS=オプションは、テーブル内のオブザベーションの数を記録するDBMSに対してのみ動作します。使用しているDBMSがオブザベーションの数を記録しなくても、テーブルの行カウントを作成すれば、REDUCEPUTOBS=オプションは動作します。 |
| ヒント | あるいは、SQLREDUCEPUTOBS=システムオプションを設定することもできます。SQLREDUCEPUTOBS=システムオプションで指定した値は、REDUCEPUTOBS=オプションが設定されない限り、すべてのSQLプロシジャステートメントに対して有効です。REDUCEPUTOBS=オプションの値は、SQLREDUCEPUTOBS=システムオプションよりも優先されます。RESETステートメントを使用して、REDUCEPUTOBS=オプションを設定またはリセットすることもできます。ただし、REDUCEPUTOBS=オプションの値を変更しても、SQLREDUCEPUTOBS=システムオプションの値は変更されません。詳細については、SQLREDUCEPUTOBS= システムオプションを参照してください。 |
REDUCEPUTVALUES=n
REDUCEPUT=オプションをDBMS、BASEまたはALLに設定した場合、PROC SQLがクエリ内のPUT関数の最適化を考慮するためにPUT関数式に存在できるSAS出力形式値の最大数を指定します。
| デフォルト | 100 |
|---|---|
| 範囲 | 100–3,000 |
| 要件 | nは、整数でなければなりません |
| 操作 | PUT関数式内のSAS出力形式値の数がこの値を超えた場合、PROC SQLはPUT関数を最適化しません。 |
| ヒント | あるいは、SQLREDUCEPUTVALUES=システムオプションを設定することもできます。SQLREDUCEPUTVALUES=システムオプションで指定した値は、REDUCEPUTVALUES=オプションが設定されない限り、すべてのSQLプロシジャステートメントに対して有効です。REDUCEPUTVALUES=オプションの値は、SQLREDUCEPUTVALUES=システムオプションよりも優先されます。RESETステートメントを使用して、REDUCEPUTVALUES=オプションを設定またはリセットすることもできます。ただし、REDUCEPUTVALUES=オプションの値を変更しても、SQLREDUCEPUTVALUES=システムオプションの値は変更されません。詳細については、SQLREDUCEPUTVALUES= システムオプションを参照してください。 |
| REDUCEPUTVALUES=の値は、個別の最適化で使用されます。たとえば、WHERE句にPUT関数が存在し、SELECTステートメントには別のPUT関数が存在し、値を含む両方の関数にユーザー定義の出力形式が設定されている場合、REDUCEPUTVALUES=の値が句とステートメントで別々に適用されます。 |
REMERGE | NOREMERGE
データの再マージを使用するクエリをPROC SQLが処理できるかどうかを指定します。PROC SQLの再マージ機能は、クエリを完了するために、テーブルのパススルーを2回実行します。つまり、最初のパススルーで作成されたデータを、2番目のパススルーで使用します。NOREMERGEシステムオプションが設定されると、PROC SQLはデータの再マージを処理できません。NOREMERGオプションを設定して再マージを実行しようとすると、エラーがSASログに書き込まれます。
| デフォルト | REMERGE |
|---|---|
| ヒント | あるいは、SQLREMERGEシステムオプションを設定することもできます。SQLREMERGEシステムオプションで指定した値は、PROC SQL REMERGEオプションが設定されない限り、すべてのSQLプロシジャステートメントに対して有効です。REMERGEオプションの値は、SQLREMERGEシステムオプションよりも優先されます。RESETステートメントを使用して、REMERGEオプションを設定またはリセットすることもできます。ただし、REMERGEオプションの値を変更しても、SQLREMERGEシステムオプションの値は変更されません。詳細については、SQLREMERGE システムオプションを参照してください。 |
| 参照項目: | データの再マージ |
SORTMSG | NOSORTMSG
PROC SORTを使用してテーブルを内部的に並べ替えることができるORDER BYのような特定の操作の場合、並べ替えに関する情報がPROC SORTから要求されるかどうか、およびその情報がログに表示されるかどうかを指定します。
| デフォルト | NOSORTMSG |
|---|
SORTSEQ=sort-table | LINGUISTIC
クエリにORDER BY句が含まれる場合に使用される照合順序を指定します。このオプションは、システムまたはインストールの、デフォルトの照合順序以外の照合順序が必要な場合にのみ使用します。
| sort-table | PROC TRANTABで作成した変換テーブルを指定します。 |
| LINGUISTIC | 照合順序がセッションロケールから決定され、デフォルトの照合オプションが使用されることを指定します。SORTSEQシステムオプションに対してLINGUISTICが指定された場合、PROC SQはその設定に従います。PROC SQL SORTSEQオプションの設定は、SORTSEQシステムオプションの設定よりも優先されます。 |
注意
ORDER BY句でSORTKEY関数を使用する場合は、PROC SQLのSORTSEQ=LINGUISTICオプション、またはSORTSEQ=LINGUISTICシステムオプションを使用しないでください。意図しない順序が生成されます。
| 参照項目: | SORTSEQ= システムオプション (SAS各国語サポート(NLS): リファレンスガイド) |
|---|---|
| 言語照合の指定 (SAS各国語サポート(NLS): リファレンスガイド) |
STIMER | NOSTIMER
PROC SQLが、タイミング情報を、プロシジャ全体の累積値ではなくステートメントごとにSASログに書き込むかどうかを指定します。このオプションが動作するには、SASシステムオプションのSTIMERも指定する必要があります。オペレーティングシステムによっては、SASを呼出すときにこのシステムオプションを指定する必要があります。このシステムオプションを単独で使用すると、ステートメントごとのタイミング情報ではなく、SQLプロシジャ全体のタイミング情報が表示されます。
| デフォルト | NOSTIMER |
|---|
STOPONTRUNC
切り捨てエラーが発生した場合に、列のサイズよりも大きいデータを含む行を挿入または更新しないことを指定します。これは、INSERTステートメントまたはUPDATEステートメントでSET句を使用した場合にのみ適用されます。
THREADS | NOTHREADS
システムオプションが制限されていない限り、特定のPROC SQLの呼び出しに対して、SASシステムオプションのTHREADS|NOTHREADSをオーバーライドします。(制限事項を参照。)特定のクエリで使用するために、THREADS|NOTHREADSをRESETステートメントで指定することもできます。THREADSを指定すると、PROC SQLは、大量のデータを伴う並べ替え動作のパフォーマンス向上を目的として、並列処理を使用します。並列処理の詳細については、SAS言語リファレンス: 解説編を参照してください。
| デフォルト | SASシステムオプションのTHREADS | NOTHREADSの値。 |
|---|---|
| 制限事項 | サイト管理者は、制限対象オプションテーブルを作成できます。制限対象オプションテーブルは、起動時に構築されるSASシステムオプション値を指定します。この値は、オーバーライドできません。THREADS | NOTHREADSシステムオプションを制限対象オプションテーブルに記述すると、このオプションを設定するどのような試みも無視され、警告メッセージがSASログに書き込まれます。 |
| 操作 | PROC SQLステートメントまたはRESETステートメントでTHREADS|NOTHREADSが指定された場合、このPROC SQLの呼び出しでは、このオプションをデフォルト(つまり、SASシステムオプションのTHREADS|NOTHREADSの値)にリセットする方法はありません。 |
| 参照項目: | THREADS システムオプション (SASシステムオプション: リファレンス) |
UNDO_POLICY=NONE | OPTIONAL | REQUIRED
データの更新中にエラーが発生した場合にPROC SQLが更新済みデータをどう処理するかを指定します。UNDO_POLICY=を使用して、変更を永続化するかどうかを制御できます。
NONE
すべての更新または挿入を維持します。
OPTIONAL
確実に破棄できるすべての更新または挿入を破棄します。
REQUIRED
エラー発生時点までに実行されたすべての挿入または更新を破棄します。場合によっては、確実にUNDO操作を実行できるとは限りません。たとえば、プログラムがSAS/ACCESSビューを使用する場合、同時に行われた他の変更による影響を破棄しなければ、INSERTステートメントおよびUPDATEステートメントによる影響を破棄できないことがあります。その場合、PROC SQLはエラーメッセージを発行し、ステートメントを実行しません。
このオプションは、他のユーザーが新しく挿入された行を更新することを許可します。挿入中にエラーが発生した場合、PROC SQLは、別のユーザーが更新したレコードを削除できます。その場合、ステートメントは実行されず、エラーメッセージが発行されます。
| デフォルト | REQUIRED |
|---|---|
| ヒント | SPDエンジンを使用してデータセットを更新している場合、UNDO_POLICY=NONEに設定することによって処理のパフォーマンスを大幅に向上できます。ただし、NONEがアプリケーションに適した設定であることを確認してください。 |
| あるいは、SQLUNDOPOLICYシステムオプションを設定することもできます。SQLUNDOPOLICY=システムオプションで指定した値は、PROC SQLのUNDO_POLICY=オプションが設定されない限り、すべてのSQLプロシジャステートメントに対して有効です。UNDO_POLICY=オプションの値は、SQLUNDOPOLICY=システムオプションよりも優先されます。RESETステートメントを使用して、UNDO_POLICY=オプションを設定またはリセットすることもできます。ただし、UNDO_POLICY=オプションの値を変更しても、SQLUNDOPOLICY=システムオプションの値は変更されません。プロシジャの完了後は、SQLUNDOPOLICY=システムオプションの値に戻ります。詳細については、SQLUNDOPOLICY= システムオプションを参照してください。 |
UBUFSIZE=n | nK | nM | nG
PROC SQLのページ化されたメモリサブシステムにおける内部的な一時バッファーのページサイズを指定します。PROC SQLは、このサブシステムを使用して、結合、集計、交差などの操作を実装します。出力は、1(バイト)、1024(キロバイト)、1,048,576(メガバイト),、1,073,741,824(ギガバイト)のうちのいずれかの倍数で表されます。たとえば、値65536では65536バイトのページサイズ、値64kでは65536バイトのページサイズが指定されます。
UBUFSIZEを、特定のクエリで使用するためにRESETステートメントで指定することもできます。
| デフォルト | 0。これを指定すると、SASはオペレーティングシステムの最小最適ページサイズを使用します。 |
|---|
WARNRECURS | NOWARNRECURS
再帰的参照に対する警告をSASログに表示するかどうかを指定します。
NOWARNRECURSは、再帰的参照を、警告のかわりに注としてSASログに表示することを指定します。
| デフォルト | WARNRECURS |
|---|