天気が熱いな~~~
熱い熱い……上班的时候大家都在抱怨,据时代报上所说昨天20.9摄氏度,今天21摄氏度。NND这哪像是冬天啊……
先说说火车票的事情,江同学前天早上5点钟到上海南站排队买火车票,请假到快十点,票尽未果。昨晚下班后直接就去了南站,和徐同学轮流排队,通宵买票,终于在早上买到了过年回家的车票(顺便帮朱同学吴同学买了票,结果后面排队的人直骂票贩子)。
偶年三十回家,售票开始时间是明早七点半,正好老妈在这边,明早让她帮我买票。到南京的车应该很好买的吧,城际列车~
办公室的座位又开始调整,我也结束了这两个星期的“清闲”,开始成为真正的“代码扫雪工”。
不过给我的本子还真是变态啊,cobol程序里面全是sql文,明显欺负我cobol初学者※oracle初学者……
幸好还有互联网,晚上加班的时候切到内线,遇到完全没有头绪的语法就搜一下:
关于OCCURS句,cpy文里的入力定义中出现,相当于二次元表、三次元表:
[code]機 能
画面節のOCCURS(反復)句は、同じ画面項目が繰り返されるとき、その記述項をいちいち指定する手間を省き、また添字を付けるための必要な情報を与える。
一般形式
OCCURS 整数1 TIMES
構文規則
1.
整数1は、画面記述項の出現番号を示す。
2.
OCCURS句は、レベル番号01の画面記述項には指定できない。
3.
OCCURS句を指定した集団項目に従属する画面記述項にOCCURS句を指定してはならない(入れ子のOCCURS句は指定できない)。
4.
OCCURS句を画面の出力又は更新フィールドに適用するには、データ項目は同じ出現番号をもつ一つのOCCURS句をもつか又はOCCURS句があってはならない。このOCCURS句に、DEPENDING指定があってはならない。
5.
OCCURS句を画面の入力又は更新フィールドに適用するには、受取り側データ項目に同じ出現番号をもつ一つのOCCURS句がなければならない。このOCCURS句に、DEPENDING指定があってはならない。
6.
COLOR句がOCCURS句をもつ又は従属したOCCURS句を含む画面記述項に指定されていると、COLOR句で数字データ項目の表を参照できる。色を定義する表の出現番号は、画面記述項の出現番号と同じでなければならない。
一般規則
1.
ファイル節、作業場所節及び連絡節で使用するOCCURS句に適用する一般規則が、画面節のOCCURS句にも適用される。本章の5.7.1.10を参照のこと。
2.
各画面記述項は、整数1で指定した回数だけOCCURS句の作用を繰返し受ける。
3.
表中の画面項目に行番号やカラム番号を書くと、それらの番号の少なくとも一つは、相対位置番号でなければならない。絶対番号を書くと、画面項目の各出現値は同じ画面位置に置かれる。
4.
画面項目が一つの出力又は更新フィールドで、送出し側項目にOCCURS句がなければ、DISPLAY文は、送出し側項目の内容を画面項目の出現のすべてに転記する。
5.
画面項目が一つの出力又は更新フィールドで、送出し側項目にOCCURS句があると、DISPLAY文は、各送出し側項目の出現の内容を対応する画面項目の出現に転記する。
6.
画面項目が一つの入力又更新フィールドのとき、ACCEPT文は、画面項目の各出現に入力されたデータを対応する受取り側項目の出現に転記する。
7.
表を参照するCOLOR句を指定すると、表の各出現は対応する画面項目の出現に対して色を指定する。
例:
DATA DIVISION.
WORKING-STORAGE SECTION.
01 DATA-TABLE.
03 DATA-ELEMENT OCCURS 5 TIMES PIC X(5).
01 COLOR-TABLE.
03 COLOR-ELEMENT OCCURS 5 TIMES PIC 9(5).
SCREEN SECTION.
01 SCREEN-1.
03 OCCURS 5 TIMES, USING DATA-ELEMENT, COLOR
COLOR-ELEMENT.
例
1.
このプログラムは、一行で簡単な表のデータを受け取る。
IDENTIFICATION DIVISION.
PROGRAM-ID. OCCURS-SAMPLE-1.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 TABLE-1.
03 TABLE-ITEM OCCURS 5 TIMES PIC X(5).
SCREEN SECTION.
01 SCREEN-1.
03 ″ TABLE ITEMS:″.
03 OCCURS 5 TIMES USING TABLE-ITEM, COLUMN + 2.
PROCEDURE DIVISION.
MAIN-LOGIC.
DISPLAY WINDOW ERASE.
DISPLAY SCREEN-1.
ACCEPT SCREEN-1.
STOP RUN.
2.
このプログラムは、それぞれの行位置で一対の2つの表要素を受け取る。
IDENTIFICATION DIVISION.
PROGRAM-ID. OCCURS-SAMPLE-2.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 TABLE-1.
03 TABLE-GROUP OCCURS 5 TIMES.
05 ITEM-1 PIC X(5).
05 ITEM-2 PIC 9(5).
SCREEN SECTION.
01 SCREEN-1.
03 ″ TEXT NUMBER″ .
03 OCCURS 5 TIMES.
05 USING ITEM-1, LINE + 1.
05 USING ITEM-2, COLUMN + 2.
PROCEDURE DIVISION.
MAIN-LOGIC.
DISPLAY WINDOW ERASE.
DISPLAY SCREEN-1.
ACCEPT SCREEN-1.
STOP RUN.
3.
表データ項目を使用しない出力例を示す。
SCREEN SECTION.
01 LINES-SCREEN.
03 ″ -″ OCCURS 10 TIMES.
"----------"と表示される。これは、送出し側項目にOCCURS句がない一般規則4.の適用例である。[/code]
关于PERFORM VARYING ,一个循环语句:
[code]PERFORM VARYING 命令でテーブル制御
「PERFORM VARYING」という繰返し命令は、テーブル利用時には頻繁に利用されます。ここでもう一度おさらいしておきましょう。
PERFORM VARYING インデックスス FROM 初期値 BY 増分値
UNTIL この繰返しを抜ける条件
繰返し実行させたい命令1
繰返し実行させたい命令2
:
:
繰返し実行させたい命令N
END-PERFORM--------------------------------------------------------------------------------
PERFORM VARYING を利用したテーブル制御サンプル
PERFORM VARYING IDX FROM 1 BY 1 UNTIL IDX > 9
MOVE ZERO TO TABLE-ITEM(IDX)
MOVE IDX TO TABLE-NUMBER(IDX)
ADD IDX TO GOUKEI-COUNT
DISPLAY "TABLE(" IDX
") : ITEM=" TABLE-ITEM(IDX)
" : NUMBER=" TABLE-NUMBER(IDX)
" : GOUKEI=" GOUKEI-COUNT
END-PERFORM
--------------------------------------------------------------------------------
処理結果は以下の通り
TABLE(1) : ITEM=0 : NUMBER=1 : GOUKEI=01
TABLE(2) : ITEM=0 : NUMBER=2 : GOUKEI=03
TABLE(3) : ITEM=0 : NUMBER=3 : GOUKEI=06
TABLE(4) : ITEM=0 : NUMBER=4 : GOUKEI=10
TABLE(5) : ITEM=0 : NUMBER=5 : GOUKEI=15
TABLE(6) : ITEM=0 : NUMBER=6 : GOUKEI=21
TABLE(7) : ITEM=0 : NUMBER=7 : GOUKEI=28
TABLE(8) : ITEM=0 : NUMBER=8 : GOUKEI=36
TABLE(9) : ITEM=0 : NUMBER=9 : GOUKEI=45
どうでしょう。わかりますか?テーブル利用時に、PERFORM VARYING が使われる理由は、テーブルの一括クリアやインデックスの値を利用したり取得することが非常に効率よく出来るためです。二次元、三次元のテーブルの場合、更にPERFORM VARYING の利用頻度は高くなります。テーブル利用時にはPERFORM VARYING命令をセットで憶えてしまいましょうね。 [/code]
DECODE语句:
[code]「IF」「THEN」「ELSE」というのは、プログラム言語には必須の制御のひとつですが、その機能を提供する関数が DECODE です。 orACLEユーザの方は是非とも使いこなして頂きたい関数です。これを使いこなせるようになると、大抵のことが一つのSQLで行えるようになることがおわかり頂けると思います。
使用例を示すと
SQL > Select NAME "氏名" , SEX
2 > , DECODE( SEX , 1 , '男' , '女' ) "性別"
3 > FROM PERSONAL ;
氏名 SEX 性別
--------------------- ---- ----
徳川 家康 1 男
与謝野 晶子 2 女
この2行目の「DECODE( SEX , 1 , '男' , '女' ) 」の部分は、
IF SEX = 1 THEN
RETURN '男';
ELSE
RETURN '女';
END IF;
という動きになってます。
これを、
IF SEX = 1 THEN
RETURN '男';
ELSIF SEX = 2 THEN
RETURN '女';
ELSE
RETURN '不明';
END IF;
としたいのなら、「DECODE( SEX , 1 , '男' , 2, '女', '不明' ) 」とします。[/code]
关于Oracle/PLSQL:的NVL Function语法:
[code]In oracle/PLSQL, the NVL function lets you substitute a value when a null value is encountered.
The syntax for the NVL function is:
NVL( string1, replace_with )
string1 is the string to test for a null value.
replace_with is the value returned if string1 is null.
Example #1:
select NVL(supplier_city, 'n/a')
from suppliers;
The SQL statement above would return 'n/a' if the supplier_city field contained a null value. Otherwise, it would return the supplier_city value.
Example #2:
select supplier_id,
NVL(supplier_desc, supplier_name)
from suppliers;
This SQL statement would return the supplier_name field if the supplier_desc contained a null value. Otherwise, it would return the supplier_desc.
Example #3:
select NVL(commission, 0)
from sales;
This SQL statement would return 0 if the commission field contained a null value. Otherwise, it would return the commission field.[/code]
举的几个例子都很好懂的,唉,没想到现在上网查资料居然也不是中文的。还好嘛语言都懂一点,虽然没一个精通滴。就好似偶在QQ群里说的,懂点英文懂点日文懂点中文懂点计算机,可惜没一样精通,典型的伪劣产品啊!~
对头,晚上已经下雨了。
2007-02-07 10:14 下午不错的家伙:)
验证码555 我喜欢的数字。
-QA from epoint.com.cn
2007-02-07 9:06 下午同学说 北方有强冷空气要南下了。。。很快要冷了。。。
2007-02-07 12:39 下午