} ◎I言語技術情報5(SQL=で使用する変数の説明)


(VER8.3以降用,2011年7月17日改定)
SQL=で使用する変数の説明。
検索する場合のSQL文は、通常はCOPY=@ZZZZZZ_SQLで使用し、変数で対応しているので、ほとんどの場合このままで動きますが、 非常に複雑なシステムを作る場合は直接プログラム内に書いて対応する必要が有る場合があります。また、 変数がどの様に変換されるか理解しておくと、色々参考になりますので、説明しておきます。
(1)_SELECT##(REPEAT=_SELECT_COUNT(=_DATA_COUNT))
◎SELECT以下を組み立てるので通常は_SELECT1が’SELECT データ名'、_SELECT2以降が’,データ名'となります。
◎DATA=にSELECT=が指定してある場合はデータ名ではなくSELECT=の内容を使用します。
◎SQL_SELECT=が指定してある場合は_SELECT1のSLECETとデータ名の間に指定文字が付加されます。
◎繰り返しが無い場合の_SELECT##はSELECT ' 'となります。
(2)_FROM##(REPEAT=_FROM_COUNT)
◎FROM以下を組み立てるので_FROM1はPROGRAM=で指定したテーブルを使って'FROM テーブル名 別名’となり、 _FROM2以降はINNER=等で指定した分(_FROM_COUNT)のJOINとONが付加されます。
◎ON以下はJOIN_ONやJOIN_KEYで変更する事が出来ます。
(3)_LEFT##(REPEAT=_LEFT_COUNT(=_DATA_COUNT))
◎データ辞書内で指定した内容でLEFT OUTER JOIN文を組み立てます。
◎DATA={,&別名}のように&付き別名が設定されている場合のみ組み立てられます。
◎データ辞書のテーブル名とプログラムの別名で指定したテーブル名は一致している必要があります。
◎繰り返しが無い場合の_LEFT##は空白となります。
(4)_WHERE##(REPEAT=_WHERE_COUNT(=_SET_COUNT))
◎WHERE以下を組み立てます。
◎該当データの"データ名@WHERE”の内容を前に?_WHERE_AND?を付け更に前後にカッコを付けて設定します。 通常は、文字データが"データ名 LIKE ’内容%’”となり、数値データは"データ名>=内容"となります。 ただし、属性2が'O'の場合は'='の一致比較となります。 尚、内容が空白(NULL)の場合は空白が設定されます。
◎_WHERE_ANDは初期値は"WHERE"ですが、使用された時点で"AND"に変わります。 尚、_WHERE1、_WHERE##、_WHERE$$が発見された場合は”WHERE"に戻ります。
◎SET={=}等比較条件を陽に設定した場合はその比較方法が採用されます。 "=","<",">","<=",">=","<>","L","I","E"が設定できます。尚、L,I,EはLIKE用でLが最後が%、Iが前後に%、Eが先頭に%が付きます。
◎"データ名@WHERE”はプログラムで変更することも出来ます。
◎SET={,*}のように別名を*とする事で"データ名@WHERE”に空白が転送されるので、この行も空白にする事ができます。
◎繰り返しが無い場合の_WHERE##は空白となります。
(5)_GROUP##(REPEAT=_GROUP_COUNT(=_DATA_COUNT))
◎GROUP BY以下を組み立てます。集計関数を使用する場合のみ使用します。
DATA=の属性4に'G'を設定すると、この行に_SELECT##と同じ内容のものが設定されます。
◎最初に採用された行に”GROUP BY"が付き以降は”,”が付きます。
◎繰り返しが無い場合の_GROUP##は空白となります。
(6)_HAVING
◎_HAVINGは直接値を設定した場合先頭にHAVING BYが付加され、集計関数の条件設定用です。
(7)_ORDER##(REPEAT=_ORDER_COUNT)
◎ORDERD BY以下を組み立てます。
◎最初に採用された行が"ORDER BY 番号"となり以降は",番号"となります。
◎_ORDER_COUNTはDATA=の属性1が'K'で属性3が'C'以外の時か属性3が'A','D'が発見された場合はその最大のカウントとなり 、発見されない場合は_DATA_COUNTと同じとなります。
◎属性3が'A'の場合はASENDINGの意味でKやDが無い場合で、ここまで採用したい場合にのみ使用します。
◎属性3が'C'の場合はCUTの意味で採用しません。
◎属性3が'D'の場合はDESCENDINGの意味でDESCも付加します。
◎繰り返しが無い場合の_ORDER##は空白となります。
All Rights Reserved, Copyright (C) 2011-2011 Nobumichi Harasawa.