このドキュメントでは、『プログラミングガイド』で参照されている追加のプログラム例を示します。
注意:
SYSEXPG でもソースオブジェクトで提供されています。プログラム例では、Software AG 提供のデモ用ファイル EMPLOYEES と VEHICLES のデータを使用します。Natural ライブラリ SYSEXPG には、Natural 関数のプログラム例も含まれています。
SYSEXSYN で提供され、『ステートメント』ドキュメントの「参照プログラム例」セクションで説明されています。
SYSEXPG および SYSEXSYN が使用可能であるかを Natural 管理者に確認してください。
OPTIONS を TRUNCATION に設定する必要があります。
以下のトピックについて説明します。
次の例は、「データベースアクセスのためのステートメント」セクションで参照されています。
** Example 'READX03': READ (with LOGICAL clause)
************************************************************************
DEFINE DATA LOCAL
1 EMPLOY-VIEW VIEW OF EMPLOYEES
2 NAME
2 PERSONNEL-ID
2 JOB-TITLE
END-DEFINE
*
LIMIT 8
READ EMPLOY-VIEW LOGICAL BY PERSONNEL-ID
DISPLAY NOTITLE *ISN NAME
'PERS-NO' PERSONNEL-ID
'POSITION' JOB-TITLE
END-READ
END
プログラム READX03 の出力:
ISN NAME PERS-NO POSITION
----------- -------------------- -------- -------------------------
204 SCHINDLER 11100102 PROGRAMMIERER
205 SCHIRM 11100105 SYSTEMPROGRAMMIERER
206 SCHMITT 11100106 OPERATOR
207 SCHMIDT 11100107 SEKRETAERIN
208 SCHNEIDER 11100108 SACHBEARBEITER
209 SCHNEIDER 11100109 SEKRETAERIN
210 BUNGERT 11100110 SYSTEMPROGRAMMIERER
211 THIELE 11100111 SEKRETAERIN
次の例は、「データベースアクセスのためのステートメント」セクションで参照されています。
** Example 'FINDX07': FIND (with several clauses)
************************************************************************
DEFINE DATA LOCAL
1 EMPLOY-VIEW VIEW OF EMPLOYEES
2 NAME
2 FIRST-NAME
2 CITY
2 SALARY (1)
2 CURR-CODE (1)
END-DEFINE
*
FIND EMPLOY-VIEW WITH PHONETIC-NAME = 'JONES' OR = 'BECKR'
AND CITY = 'BOSTON' THRU 'NEW YORK'
BUT NOT 'CHAPEL HILL'
SORTED BY NAME
WHERE SALARY (1) < 28000
DISPLAY NOTITLE NAME FIRST-NAME CITY SALARY (1)
END-FIND
END
プログラム FINDX07 の出力:
NAME FIRST-NAME CITY ANNUAL
SALARY
-------------------- -------------------- -------------------- ----------
BAKER PAULINE DERBY 4450
JONES MARTHA KALAMAZOO 21000
JONES KEVIN DERBY 7000
** Example 'FINDX08': FIND (with LIMIT) ** Demonstrates FIND statement with LIMIT option to ** terminate program with an error message if the ** number of records selected exceeds a specified ** limit (no output). ************************************************************************ DEFINE DATA LOCAL 1 EMPLOY-VIEW VIEW OF EMPLOYEES 2 NAME 2 JOB-TITLE END-DEFINE * FIND EMPLOY-VIEW WITH LIMIT (5) JOB-TITLE = 'SALES PERSON' DISPLAY NAME JOB-TITLE END-FIND END
プログラム FINDX08 によって発生するランタイムエラー:
NAT1005 More records found than specified in search
limit.
** Example 'FINDX09': FIND (using *NUMBER, *COUNTER, *ISN)
************************************************************************
DEFINE DATA LOCAL
1 EMPLOY-VIEW VIEW OF EMPLOYEES
2 DEPT
2 NAME
END-DEFINE
*
FIND EMPLOY-VIEW WITH CITY = 'BOSTON'
WHERE DEPT = 'TECH00' THRU 'TECH10'
DISPLAY NOTITLE
'COUNTER' *COUNTER NAME DEPT 'ISN' *ISN
AT START OF DATA
WRITE '(TOTAL NUMBER IN BOSTON:' *NUMBER ')' /
END-START
END-FIND
END
プログラム FINDX09 の出力:
COUNTER NAME DEPARTMENT ISN
CODE
----------- -------------------- ---------- -----------
(TOTAL NUMBER IN BOSTON: 7 )
1 STANWOOD TECH10 782
2 PERREAULT TECH10 842
** Example 'FINDX10': FIND (combined with READ)
************************************************************************
DEFINE DATA LOCAL
1 EMPLOY-VIEW VIEW OF EMPLOYEES
2 PERSONNEL-ID
2 NAME
2 FIRST-NAME
1 VEHIC-VIEW VIEW OF VEHICLES
2 PERSONNEL-ID
2 MAKE
END-DEFINE
*
LIMIT 15
*
EMP. READ EMPLOY-VIEW BY NAME STARTING FROM 'JONES'
VEH. FIND VEHIC-VIEW WITH PERSONNEL-ID = PERSONNEL-ID (EMP.)
IF NO RECORDS FOUND
MOVE '*** NO CAR ***' TO MAKE
END-NOREC
DISPLAY NOTITLE
NAME (EMP.) (IS=ON)
FIRST-NAME (EMP.) (IS=ON)
MAKE (VEH.)
END-FIND
END-READ
END
プログラム FINDX10 の出力:
NAME FIRST-NAME MAKE
-------------------- -------------------- --------------------
JONES VIRGINIA CHRYSLER
MARSHA CHRYSLER
CHRYSLER
ROBERT GENERAL MOTORS
LILLY FORD
MG
EDWARD GENERAL MOTORS
MARTHA GENERAL MOTORS
LAUREL GENERAL MOTORS
KEVIN DATSUN
GREGORY FORD
JOPER MANFRED *** NO CAR ***
JOUSSELIN DANIEL RENAULT
JUBE GABRIEL *** NO CAR ***
JUNG ERNST *** NO CAR ***
JUNKIN JEREMY *** NO CAR ***
KAISER REINER *** NO CAR ***
** Example 'FINDX11': FIND NUMBER (with *NUMBER)
************************************************************************
DEFINE DATA LOCAL
1 EMPLOY-VIEW VIEW OF EMPLOYEES
2 FIRST-NAME
2 NAME
2 CITY
2 JOB-TITLE
2 SALARY (1)
*
1 #PERCENT (N.2)
1 REDEFINE #PERCENT
2 #WHOLE-NBR (N2)
1 #ALL-BOST (N3.2)
1 #SECR-ONLY (N3.2)
1 #BOST-NBR (N3)
1 #SECR-NBR (N3)
END-DEFINE
*
F1. FIND NUMBER EMPLOY-VIEW WITH CITY = 'BOSTON'
F2. FIND NUMBER EMPLOY-VIEW WITH CITY = 'BOSTON'
AND JOB-TITLE = 'SECRETARY'
*
MOVE *NUMBER(F1.) TO #ALL-BOST #BOST-NBR
MOVE *NUMBER(F2.) TO #SECR-ONLY #SECR-NBR
DIVIDE #ALL-BOST INTO #SECR-ONLY GIVING #PERCENT
*
WRITE TITLE LEFT JUSTIFIED UNDERLINED
'There are' #BOST-NBR 'employees in the Boston offices.' /
#SECR-NBR '(=' #WHOLE-NBR (EM=99%')') 'are secretaries.'
*
SKIP 1
FIND EMPLOY-VIEW WITH CITY = 'BOSTON'
AND JOB-TITLE = 'SECRETARY'
DISPLAY NAME FIRST-NAME JOB-TITLE SALARY (1)
END-FIND
END
プログラム FINDX11 の出力:
There are 7 employees in the Boston offices.
3 (= 42%) are secretaries.
-------------------------------------------------------------------------------
NAME FIRST-NAME CURRENT ANNUAL
POSITION SALARY
-------------------- -------------------- ------------------------- ----------
SHAW LESLIE SECRETARY 18000
CREMER WALT SECRETARY 20000
COHEN JOHN SECRETARY 16000
次の例は、「データベース処理ループ」セクションで参照されています。
** Example 'READX04': READ (in combination with FIND and the system
** variables *NUMBER and *COUNTER)
************************************************************************
DEFINE DATA LOCAL
1 EMPLOY-VIEW VIEW OF EMPLOYEES
2 PERSONNEL-ID
2 NAME
2 FIRST-NAME
1 VEHIC-VIEW VIEW OF VEHICLES
2 PERSONNEL-ID
2 MAKE
END-DEFINE
*
LIMIT 10
RD. READ EMPLOY-VIEW BY NAME STARTING FROM 'JONES'
FD. FIND VEHIC-VIEW WITH PERSONNEL-ID = PERSONNEL-ID (RD.)
IF NO RECORDS FOUND
ENTER
END-NOREC
/*
DISPLAY NOTITLE
*COUNTER (RD.)(NL=8) NAME (AL=15) FIRST-NAME (AL=10)
*NUMBER (FD.)(NL=8) *COUNTER (FD.)(NL=8) MAKE
END-FIND
END-READ
END
プログラム READX04 の出力:
CNT NAME FIRST-NAME NMBR CNT MAKE
--------- --------------- ---------- --------- --------- --------------------
1 JONES VIRGINIA 1 1 CHRYSLER
2 JONES MARSHA 2 1 CHRYSLER
2 JONES MARSHA 2 2 CHRYSLER
3 JONES ROBERT 1 1 GENERAL MOTORS
4 JONES LILLY 2 1 FORD
4 JONES LILLY 2 2 MG
5 JONES EDWARD 1 1 GENERAL MOTORS
6 JONES MARTHA 1 1 GENERAL MOTORS
7 JONES LAUREL 1 1 GENERAL MOTORS
8 JONES KEVIN 1 1 DATSUN
9 JONES GREGORY 1 1 FORD
10 JOPER MANFRED 0 0
** Example 'LIMITX01': LIMIT (for READ, FIND loop processing)
************************************************************************
DEFINE DATA LOCAL
1 EMPLOY-VIEW VIEW OF EMPLOYEES
2 PERSONNEL-ID
2 FIRST-NAME
2 NAME
1 VEH-VIEW VIEW OF VEHICLES
2 PERSONNEL-ID
2 MAKE
END-DEFINE
*
LIMIT 4
*
READ EMPLOY-VIEW BY NAME STARTING FROM 'A'
FIND VEH-VIEW WITH PERSONNEL-ID = EMPLOY-VIEW.PERSONNEL-ID
IF NO RECORDS FOUND
MOVE 'NO CAR' TO MAKE
END-NOREC
DISPLAY PERSONNEL-ID NAME FIRST-NAME MAKE
END-FIND
END-READ
END
プログラム LIMITX01 の出力:
Page 1 04-12-13 14:01:57
PERSONNEL-ID NAME FIRST-NAME MAKE
------------ -------------------- -------------------- --------------------
ABELLAN KEPA NO CAR
30000231 ACHIESON ROBERT FORD
ADAM SIMONE NO CAR
20008800 ADKINSON JEFF GENERAL MOTORS
次の例は、「ACCEPT/REJECT を使用したレコードの選択」セクションで参照されています。
** Example 'ACCEPX04': ACCEPT IF ... LES THAN ... ************************************************************************ DEFINE DATA LOCAL 1 EMPLOY-VIEW VIEW OF EMPLOYEES 2 PERSONNEL-ID 2 NAME 2 JOB-TITLE 2 SALARY (1) END-DEFINE * LIMIT 20 READ EMPLOY-VIEW BY PERSONNEL-ID = '20017000' ACCEPT IF SALARY (1) LESS THAN 38000 DISPLAY NOTITLE PERSONNEL-ID NAME JOB-TITLE SALARY (1) END-READ END
プログラム ACCEPX04 の出力:
PERSONNEL NAME CURRENT ANNUAL
ID POSITION SALARY
--------- -------------------- ------------------------- ----------
20017000 CREMER ANALYST 34000
20017100 MARKUSH TRAINEE 22000
20017400 NEEDHAM PROGRAMMER 32500
20017500 JACKSON PROGRAMMER 33000
20017600 PIETSCH SECRETARY 22000
20017700 PAUL SECRETARY 23000
20018000 FARRIS PROGRAMMER 30500
20018100 EVANS PROGRAMMER 31000
20018200 HERZOG PROGRAMMER 31500
20018300 LORIE SALES PERSON 28000
20018400 HALL SALES PERSON 30000
20018500 JACKSON MANAGER 36000
20018800 SMITH SECRETARY 24000
20018900 LOWRY SECRETARY 25000
** Example 'ACCEPX05': ACCEPT IF ... AND ...
************************************************************************
DEFINE DATA LOCAL
1 EMPLOY-VIEW VIEW OF EMPLOYEES
2 NAME
2 CITY
2 JOB-TITLE
2 SALARY (1:2)
END-DEFINE
*
LIMIT 6
READ EMPLOY-VIEW PHYSICAL WHERE SALARY(2) > 0
ACCEPT IF SALARY(1) > 10000
AND SALARY(1) < 50000
DISPLAY (AL=15) 'SALARY I' SALARY (1) 'SALARY II' SALARY (2)
NAME JOB-TITLE CITY
END-READ
END
プログラム ACCEPX05 の出力:
Page 1 04-12-13 14:05:28
SALARY I SALARY II NAME CURRENT CITY
POSITION
---------- ---------- --------------- --------------- ---------------
48000 46000 SPENGLER SACHBEARBEITER DARMSTADT
45000 40000 SPECK SACHBEARBEITER DARMSTADT
48000 46000 SCHINDLER PROGRAMMIERER HEPPENHEIM
36000 32000 SCHMIDT SEKRETAERIN HEPPENHEIM
** Example 'ACCEPX06': REJECT IF ... OR ...
************************************************************************
DEFINE DATA LOCAL
1 EMPLOY-VIEW VIEW OF EMPLOYEES
2 PERSONNEL-ID
2 SALARY (1)
2 JOB-TITLE
2 CITY
2 NAME
END-DEFINE
*
LIMIT 20
READ EMPLOY-VIEW LOGICAL BY PERSONNEL-ID = '20017000'
REJECT IF SALARY (1) < 20000
OR SALARY (1) > 26000
DISPLAY NOTITLE SALARY (1) NAME JOB-TITLE CITY
END-READ
END
プログラム ACCEPX06 の出力:
ANNUAL NAME CURRENT CITY
SALARY POSITION
---------- -------------------- ------------------------- --------------------
22000 MARKUSH TRAINEE LOS ANGELES
22000 PIETSCH SECRETARY VISTA
23000 PAUL SECRETARY NORFOLK
24000 SMITH SECRETARY SILVER SPRING
25000 LOWRY SECRETARY LEXINGTON
次の例は、「AT START/END OF DATA ステートメント」セクションで参照されています。
** Example 'ATENDX01': AT END OF DATA
************************************************************************
DEFINE DATA LOCAL
1 EMPLOY-VIEW VIEW OF EMPLOYEES
2 PERSONNEL-ID
2 NAME
2 JOB-TITLE
END-DEFINE
*
READ (6) EMPLOY-VIEW BY PERSONNEL-ID FROM '20017000'
DISPLAY NOTITLE NAME JOB-TITLE
AT END OF DATA
WRITE / 'LAST PERSON SELECTED:' OLD(NAME)
END-ENDDATA
END-READ
END
プログラム ATENDX01 の出力:
NAME CURRENT
POSITION
-------------------- -------------------------
CREMER ANALYST
MARKUSH TRAINEE
GEE MANAGER
KUNEY DBA
NEEDHAM PROGRAMMER
JACKSON PROGRAMMER
LAST PERSON SELECTED: JACKSON
** Example 'ATSTAX02': AT START OF DATA
************************************************************************
DEFINE DATA LOCAL
1 EMPLOY-VIEW VIEW OF EMPLOYEES
2 PERSONNEL-ID
2 FIRST-NAME
2 NAME
2 SALARY (1)
2 CURR-CODE (1)
2 BONUS (1,1)
END-DEFINE
*
LIMIT 3
FIND EMPLOY-VIEW WITH CITY = 'MADRID'
DISPLAY NAME FIRST-NAME SALARY(1) BONUS(1,1) CURR-CODE (1)
/*
AT START OF DATA
WRITE NOTITLE *DAT4E /
END-START
END-FIND
END
プログラム ATSTAX02 の出力:
NAME FIRST-NAME ANNUAL BONUS CURRENCY
SALARY CODE
-------------------- -------------------- ---------- ---------- --------
13/12/2004
DE JUAN JAVIER 1988000 0 PTA
DE LA MADRID ANSELMO 3120000 0 PTA
PINERO PAULA 1756000 0 PTA
** Example 'WRITEX09': WRITE (in combination with AT END OF DATA )
************************************************************************
DEFINE DATA LOCAL
1 EMPLOY-VIEW VIEW OF EMPLOYEES
2 CITY
2 NAME
2 BIRTH
2 JOB-TITLE
2 DEPT
END-DEFINE
*
READ (3) EMPLOY-VIEW BY CITY
DISPLAY NOTITLE NAME BIRTH (EM=YYYY-MM-DD) JOB-TITLE
WRITE 38T 'DEPT CODE:' DEPT
/*
AT END OF DATA
WRITE / 'LAST PERSON SELECTED:' OLD(NAME)
END-ENDDATA
SKIP 1
END-READ
END
プログラム WRITEX09 の出力:
NAME DATE CURRENT
OF POSITION
BIRTH
-------------------- ---------- -------------------------
SENKO 1971-09-11 PROGRAMMER
DEPT CODE: TECH10
GODEFROY 1949-01-09 COMPTABLE
DEPT CODE: COMP02
CANALE 1942-01-01 CONSULTANT
DEPT CODE: TECH03
LAST PERSON SELECTED: CANALE
次の例は、「DISPLAY および WRITE ステートメント」セクションで参照されています。
** Example 'DISPLX13': DISPLAY (compare with WRITEX08 using WRITE)
************************************************************************
DEFINE DATA LOCAL
1 EMPLOY-VIEW VIEW OF EMPLOYEES
2 PERSONNEL-ID
2 FIRST-NAME
2 NAME
2 SALARY (2)
2 BONUS (1,1)
2 CITY
END-DEFINE
*
LIMIT 2
READ EMPLOY-VIEW WITH CITY = 'CHAPEL HILL' WHERE BONUS(1,1) NE 0
/*
DISPLAY 'PERS/ID' PERSONNEL-ID NAME / FIRST-NAME
'**' '=' SALARY(1:2) 'BONUS' BONUS(1,1) CITY (AL=15)
/*
SKIP 1
END-READ
END
プログラム DISPLX13 の出力:
Page 1 04-12-13 14:11:28
PERS NAME ANNUAL BONUS CITY
ID FIRST-NAME SALARY
-------- -------------------- ------------- ---------- ---------------
20027000 CUMMINGS ** 41000 1500 CHAPEL HILL
PUALA 38900
20000200 WOOLSEY ** 26000 3000 CHAPEL HILL
LOUISE 24700
** Example 'WRITEX08': WRITE (compare with DISPLX13 using DISPLAY)
************************************************************************
DEFINE DATA LOCAL
1 EMPLOY-VIEW VIEW OF EMPLOYEES
2 PERSONNEL-ID
2 FIRST-NAME
2 NAME
2 SALARY (2)
2 BONUS (1,1)
2 CITY
END-DEFINE
*
LIMIT 2
READ EMPLOY-VIEW WITH CITY = 'CHAPEL HILL' WHERE BONUS(1,1) NE 0
/*
WRITE 'PERS/ID' PERSONNEL-ID NAME / FIRST-NAME
'**' '=' SALARY(1:2) 'BONUS' BONUS(1,1) CITY (AL=15)
/*
SKIP 1
END-READ
END
プログラム WRITEX08 の出力:
Page 1 04-12-13 14:12:43
PERS/ID 20027000 CUMMINGS
PUALA ** ANNUAL SALARY: 41000 38900 BONUS 1500
CHAPEL HILL
PERS/ID 20000200 WOOLSEY
LOUISE ** ANNUAL SALARY: 26000 24700 BONUS 3000
CHAPEL HILL
** Example 'DISPLX14': DISPLAY (with AL, SF and nX)
************************************************************************
DEFINE DATA LOCAL
1 EMPLOY-VIEW VIEW OF EMPLOYEES
2 FIRST-NAME
2 NAME
2 ADDRESS-LINE (1)
2 TELEPHONE
3 AREA-CODE
3 PHONE
2 CITY
END-DEFINE
*
READ (3) EMPLOY-VIEW BY NAME STARTING FROM 'W'
DISPLAY (AL=15 SF=5) NAME CITY / ADDRESS-LINE(1) 2X TELEPHONE
SKIP 1
END-READ
END
プログラム DISPLX14 の出力:
Page 1 04-12-13 14:14:00
NAME CITY TELEPHONE
ADDRESS
AREA TELEPHONE
CODE
--------------- --------------- --------------- ---------------
WABER HEIDELBERG 06221 456452
ERBACHERSTR. 78
WADSWORTH DERBY 0332 515365
56 PINECROFT CO
WAGENBACH FRANKFURT 069 983218
BECKERSTR. 4
** Example 'WRITEX09': WRITE (in combination with AT END OF DATA )
************************************************************************
DEFINE DATA LOCAL
1 EMPLOY-VIEW VIEW OF EMPLOYEES
2 CITY
2 NAME
2 BIRTH
2 JOB-TITLE
2 DEPT
END-DEFINE
*
READ (3) EMPLOY-VIEW BY CITY
DISPLAY NOTITLE NAME BIRTH (EM=YYYY-MM-DD) JOB-TITLE
WRITE 38T 'DEPT CODE:' DEPT
/*
AT END OF DATA
WRITE / 'LAST PERSON SELECTED:' OLD(NAME)
END-ENDDATA
SKIP 1
END-READ
END
プログラム WRITEX09 の出力:
NAME DATE CURRENT
OF POSITION
BIRTH
-------------------- ---------- -------------------------
SENKO 1971-09-11 PROGRAMMER
DEPT CODE: TECH10
GODEFROY 1949-01-09 COMPTABLE
DEPT CODE: COMP02
CANALE 1942-01-01 CONSULTANT
DEPT CODE: TECH03
LAST PERSON SELECTED: CANALE
次の例は、「ページタイトル、改ページ、空行」セクションで参照されています。
** Example 'DISPLX21': DISPLAY (usage of slash '/' in DISPLAY and WRITE)
************************************************************************
DEFINE DATA LOCAL
1 EMPLOY-VIEW VIEW OF EMPLOYEES
2 CITY
2 NAME
2 FIRST-NAME
2 ADDRESS-LINE (1)
END-DEFINE
*
WRITE TITLE LEFT JUSTIFIED UNDERLINED
*TIME
5X 'PEOPLE LIVING IN SALT LAKE CITY'
21X 'PAGE:' *PAGE-NUMBER /
15X 'AS OF' *DAT4E //
*
WRITE TRAILER UNDERLINED 'REGISTER OF' / 'SALT LAKE CITY'
*
READ (2) EMPLOY-VIEW WITH CITY = 'SALT LAKE CITY'
DISPLAY NAME /
FIRST-NAME
'HOME/CITY' CITY
'STREET/OR BOX NO.' ADDRESS-LINE (1)
SKIP 1
END-READ
END
プログラム DISPLX21 の出力:
14:15:50.1 PEOPLE LIVING IN SALT LAKE CITY PAGE: 1
AS OF 13/12/2004
-------------------------------------------------------------------------------
NAME HOME STREET
FIRST-NAME CITY OR BOX NO.
-------------------- -------------------- --------------------
ANDERSON SALT LAKE CITY 3701 S. GEORGE MASON
JENNY
SAMUELSON SALT LAKE CITY 7610 W. 86TH STREET
MARTIN
REGISTER OF
SALT LAKE CITY
-------------------------------------------------------------------------------
次の例は、「列ヘッダー」セクションで参照されています。
** Example 'DISPLX15': DISPLAY (with FC, UC)
************************************************************************
DEFINE DATA LOCAL
1 EMPLOY-VIEW VIEW OF EMPLOYEES
2 FIRST-NAME
2 NAME
2 ADDRESS-LINE (1)
2 CITY
2 TELEPHONE
3 AREA-CODE
3 PHONE
END-DEFINE
*
FORMAT AL=12 GC== UC=%
*
READ (3) EMPLOY-VIEW BY NAME STARTING FROM 'R'
DISPLAY NOTITLE (FC=*)
NAME FIRST-NAME CITY (FC=- UC=-) /
ADDRESS-LINE(1) TELEPHONE
SKIP 1
END-READ
END
プログラム DISPLX15 の出力:
****NAME**** *FIRST-NAME* ----CITY---- ========TELEPHONE========
**ADDRESS***
****AREA**** *TELEPHONE**
****CODE****
%%%%%%%%%%%% %%%%%%%%%%%% ------------ %%%%%%%%%%%% %%%%%%%%%%%%
RACKMANN MARIAN FRANKFURT 069 375849
FINKENSTR. 1
RAMAMOORTHY TY SEPULVEDA 209 175-1885
12018 BROOKS
RAMAMOORTHY TIMMIE SEATTLE 206 151-4673
921-178TH PL
** Example 'DISPLX16': DISPLAY (with '/', 'text', 'text/text')
************************************************************************
DEFINE DATA LOCAL
1 EMPLOY-VIEW VIEW OF EMPLOYEES
2 FIRST-NAME
2 NAME
2 ADDRESS-LINE (1)
2 CITY
2 TELEPHONE
3 AREA-CODE
3 PHONE
END-DEFINE
*
READ (5) EMPLOY-VIEW BY NAME STARTING FROM 'E'
DISPLAY NOTITLE
'/' NAME (AL=12) /* suppressed header
'FIRST/NAME' FIRST-NAME (AL=10) /* two-line user-defined header
'ADDRESS' CITY / /* user-defined header
' ' ADDRESS-LINE(1) /* 'blank' header
TELEPHONE (HC=L) /* default header
SKIP 1
END-READ
END
プログラム DISPLX16 の出力:
FIRST ADDRESS TELEPHONE
NAME
AREA TELEPHONE
CODE
---------- -------------------- ------ ---------------
EAVES TREVOR DERBY 0332 657623
17 HARTON ROAD
ECKERT KARL OBERRAMSTADT 06154 99722
FORSTWEG 22
ECKHARDT RICHARD DARMSTADT
BRESLAUERPL. 4
EDMUNDSON LES TULSA 918 945-4916
2415 ALSOP CT.
EGGERT HERMANN STUTTGART 0711 981237
RABENGASSE 8
次の例は、「フィールドの出力に影響を与えるパラメータ」セクションで参照されています。
これらの例は、LC、IC、TC、AL、NL、IS、ZP、ES の各パラメータ、および SUSPEND IDENTICAL
SUPPRESS ステートメントの使用法を示すために提供されています。
** Example 'DISPLX17': DISPLAY (with NL, AL, IC, LC, TC)
************************************************************************
DEFINE DATA LOCAL
1 EMPLOY-VIEW VIEW OF EMPLOYEES
2 FIRST-NAME
2 NAME
2 SALARY (1)
2 BONUS (1,1)
END-DEFINE
*
READ (3) EMPLOY-VIEW BY NAME STARTING FROM 'JONES'
DISPLAY NOTITLE (IS=ON NL=15)
NAME
'-' '=' FIRST-NAME (AL=12)
'ANNUAL SALARY' SALARY(1) (LC=USD TC=.00) /
'+ BONUSES' BONUS(1,1) (IC='+ ' TC=.00)
SKIP 1
END-READ
END
プログラム DISPLX17 の出力:
NAME FIRST-NAME ANNUAL SALARY
+ BONUSES
-------------------- -------------- ----------------------
JONES - VIRGINIA USD 46000.00
+ 9000.00
- MARSHA USD 50000.00
+ 0.00
- ROBERT USD 31000.00
+ 0.00
** Example 'DISPLX18': DISPLAY (using default settings for SF, AL, UC, ** LC, IC, TC and compare with DISPLX19) ************************************************************************ DEFINE DATA LOCAL 1 EMPLOY-VIEW VIEW OF EMPLOYEES 2 NAME 2 FIRST-NAME 2 CITY 2 SALARY (1) 2 BONUS (1,1) END-DEFINE * FIND (6) EMPLOY-VIEW WITH CITY = 'CHAPEL HILL' DISPLAY NAME FIRST-NAME SALARY(1) BONUS(1,1) END-FIND END
プログラム DISPLX18 の出力:
Page 1 04-12-13 14:20:48
NAME FIRST-NAME ANNUAL BONUS
SALARY
-------------------- -------------------- ---------- ----------
KESSLER CLARE 41000 0
ADKINSON DAVID 24000 0
GEE TOMMIE 39500 0
HERZOG JOHN 31500 0
QUILLION TIMOTHY 30500 0
CUMMINGS PUALA 41000 1500
** Example 'DISPLX19': DISPLAY (with SF, AL, LC, IC, TC and compare
** with DISPLX19)
************************************************************************
DEFINE DATA LOCAL
1 EMPLOY-VIEW VIEW OF EMPLOYEES
2 NAME
2 FIRST-NAME
2 CITY
2 SALARY (1)
2 BONUS (1,1)
END-DEFINE
*
FORMAT SF=3 AL=15 UC==
*
FIND (6) EMPLOY-VIEW WITH CITY = 'CHAPEL HILL'
DISPLAY (NL=10)
NAME
FIRST-NAME (LC='- ' UC=-)
SALARY (1) (LC=USD)
BONUS (1,1) (IC='*** ' TC=' ***')
END-FIND
END
プログラム DISPLX19 の出力:
Page 1 04-12-13 14:21:57
NAME FIRST-NAME ANNUAL BONUS
SALARY
=============== ----------------- ============== ===================
KESSLER - CLARE USD 41000 *** 0 ***
ADKINSON - DAVID USD 24000 *** 0 ***
GEE - TOMMIE USD 39500 *** 0 ***
HERZOG - JOHN USD 31500 *** 0 ***
QUILLION - TIMOTHY USD 30500 *** 0 ***
CUMMINGS - PUALA USD 41000 *** 1500 ***
** Example 'SUSPEX01': SUSPEND IDENTICAL SUPPRESS (in conjunction with
** parameters IS, ES, ZP in DISPLAY)
************************************************************************
DEFINE DATA LOCAL
1 EMPLOY-VIEW VIEW OF EMPLOYEES
2 PERSONNEL-ID
2 FIRST-NAME
2 NAME
2 CITY
1 VEH-VIEW VIEW OF VEHICLES
2 PERSONNEL-ID
2 MAKE
END-DEFINE
*
LIMIT 15
RD. READ EMPLOY-VIEW BY NAME STARTING FROM 'JONES'
SUSPEND IDENTICAL SUPPRESS
FD. FIND VEH-VIEW WITH PERSONNEL-ID = PERSONNEL-ID (RD.)
IF NO RECORDS FOUND
MOVE '******' TO MAKE
END-NOREC
DISPLAY NOTITLE (ES=OFF IS=ON ZP=ON AL=15)
NAME (RD.)
FIRST-NAME (RD.)
MAKE (FD.) (IS=OFF)
END-FIND
END-READ
END
プログラム SUSPEX01 の出力:
NAME FIRST-NAME MAKE
--------------- --------------- ---------------
JONES VIRGINIA CHRYSLER
JONES MARSHA CHRYSLER
CHRYSLER
JONES ROBERT GENERAL MOTORS
JONES LILLY FORD
MG
JONES EDWARD GENERAL MOTORS
JONES MARTHA GENERAL MOTORS
JONES LAUREL GENERAL MOTORS
JONES KEVIN DATSUN
JONES GREGORY FORD
JOPER MANFRED ******
JOUSSELIN DANIEL RENAULT
JUBE GABRIEL ******
JUNG ERNST ******
JUNKIN JEREMY ******
KAISER REINER ******
** Example 'SUSPEX02': SUSPEND IDENTICAL SUPPRESS (in conjunction with
** parameters IS, ES, ZP in DISPLAY)
** Identical to SUSPEX01, but with IS=OFF.
************************************************************************
DEFINE DATA LOCAL
1 EMPLOY-VIEW VIEW OF EMPLOYEES
2 PERSONNEL-ID
2 FIRST-NAME
2 NAME
2 CITY
1 VEH-VIEW VIEW OF VEHICLES
2 PERSONNEL-ID
2 MAKE
END-DEFINE
*
LIMIT 15
RD. READ EMPLOY-VIEW BY NAME STARTING FROM 'JONES'
SUSPEND IDENTICAL SUPPRESS
FD. FIND VEH-VIEW WITH PERSONNEL-ID = PERSONNEL-ID (RD.)
IF NO RECORDS FOUND
MOVE '******' TO MAKE
END-NOREC
DISPLAY NOTITLE (ES=OFF IS=OFF ZP=ON AL=15)
NAME (RD.)
FIRST-NAME (RD.)
MAKE (FD.) (IS=OFF)
END-FIND
END-READ
END
プログラム SUSPEX02 の出力:
NAME FIRST-NAME MAKE
--------------- --------------- ---------------
JONES VIRGINIA CHRYSLER
JONES MARSHA CHRYSLER
JONES MARSHA CHRYSLER
JONES ROBERT GENERAL MOTORS
JONES LILLY FORD
JONES LILLY MG
JONES EDWARD GENERAL MOTORS
JONES MARTHA GENERAL MOTORS
JONES LAUREL GENERAL MOTORS
JONES KEVIN DATSUN
JONES GREGORY FORD
JOPER MANFRED ******
JOUSSELIN DANIEL RENAULT
JUBE GABRIEL ******
JUNG ERNST ******
JUNKIN JEREMY ******
KAISER REINER ******
** Example 'COMPRX03': COMPRESS (using parameters LC and TC)
************************************************************************
DEFINE DATA LOCAL
1 EMPLOY-VIEW VIEW OF EMPLOYEES
2 CITY
2 SALARY (1)
2 CURR-CODE (1)
2 LEAVE-DUE
2 NAME
2 FIRST-NAME
2 JOB-TITLE
*
1 #SALARY (N9)
1 #FULL-SALARY (A25)
1 #VACATION (A11)
END-DEFINE
*
READ (3) EMPLOY-VIEW WITH CITY = 'BOSTON'
MOVE SALARY(1) TO #SALARY
COMPRESS 'SALARY :' CURR-CODE(1) #SALARY INTO #FULL-SALARY
COMPRESS 'VACATION:' LEAVE-DUE INTO #VACATION
/*
DISPLAY NOTITLE NAME FIRST-NAME
'JOB DESCRIPTION' JOB-TITLE (LC='JOB : ') /
'/' #FULL-SALARY /
'/' #VACATION (TC='DAYS')
SKIP 1
END-READ
END
プログラム COMPRX03 の出力:
NAME FIRST-NAME JOB DESCRIPTION
-------------------- -------------------- -----------------------------------
SHAW LESLIE JOB : SECRETARY
SALARY : USD 18000
VACATION: 2DAYS
STANWOOD VERNON JOB : PROGRAMMER
SALARY : USD 31000
VACATION: 1DAYS
CREMER WALT JOB : SECRETARY
SALARY : USD 20000
VACATION: 3DAYS
次の例は、「編集マスク - EM パラメータ」セクションで参照されています。
** Example 'EDITMX03': Edit mask (different EM for alpha-numeric fields)
************************************************************************
DEFINE DATA LOCAL
1 EMPLOY-VIEW VIEW OF EMPLOYEES
2 PERSONNEL-ID
2 FIRST-NAME
2 NAME
2 CITY
2 SALARY(1)
END-DEFINE
*
LIMIT 3
READ EMPLOY-VIEW BY PERSONNEL-ID FROM '20018000'
WHERE SALARY(1) = 28000 THRU 30000
DISPLAY 'N A M E' NAME (EM=X^^X^^X^^X^^X^^X^^X^^X^^X^^X^^X) /
'NAME HEX' NAME (EM=H^H^H^H^H^H^H^H^H^H^H)
FIRST-NAME (EM=' - 'X(15)*)
CITY (EM=X..X(10))
SKIP 1
END-READ
END
プログラム EDITMX03 の出力:
Page 1 04-12-13 14:26:57
N A M E FIRST-NAME CITY
NAME HEX
-------------------------------- ------------------ -------------
L O R I E - JEAN-PAUL * C..LEVELAND
D3 D6 D9 C9 C5 40 40 40 40 40 40
H A L L - ARTHUR * A..NN ARBER
C8 C1 D3 D3 40 40 40 40 40 40 40
V A S W A N I - TOMMIE * M..ONTERREY
E5 C1 E2 E6 C1 D5 C9 40 40 40 40
** Example 'EDITMX04': Edit mask (different EM for numeric fields)
************************************************************************
DEFINE DATA LOCAL
1 EMPLOY-VIEW VIEW OF EMPLOYEES
2 PERSONNEL-ID
2 FIRST-NAME
2 NAME
2 SALARY (1)
2 BONUS (1,1)
2 LEAVE-DUE
END-DEFINE
*
LIMIT 2
READ EMPLOY-VIEW BY PERSONNEL-ID = '20018000'
WHERE SALARY(1) = 28000 THRU 30000
DISPLAY (SF=4)
'N A M E' NAME
'SALARY' SALARY(1) (EM=*USD^ZZZ,999)
'BONUS (ZZ)' BONUS(1,1) (EM=S*ZZZ,999) /
'BONUS (Z9)' BONUS(1,1) (EM=SZ99,999+) /
'->' '=' BONUS(1,1) (EM=-999,999)
'VAC/DUE' LEAVE-DUE (EM=+999)
SKIP 1
END-READ
END
プログラム EDITMX04 の出力:
Page 1 04-12-13 14:27:43
N A M E SALARY BONUS (ZZ) VAC
BONUS (Z9) DUE
BONUS
-------------------- ----------- ----------- ---
LORIE USD *28,000 +**4,000 +13
+ 04,000+
-> 004,000
HALL USD *30,000 +**5,000 +14
+ 05,000+
-> 005,000
** Example 'EDITMX05': Edit mask (EM for date and time system variables) ************************************************************************ WRITE NOTITLE // 'DATE INTERNAL :' *DATX (DF=L) / ' :' *DATX (EM=N(9)' 'ZW.'WEEK 'YYYY) / ' :' *DATX (EM=ZZJ'.DAY 'YYYY) / ' ROMAN :' *DATX (EM=R) / ' AMERICAN :' *DATX (EM=MM/DD/YYYY) 12X 'OR ' *DAT4U / ' JULIAN :' *DATX (EM=YYYYJJJ) 15X 'OR ' *DAT4J / ' GREGORIAN:' *DATX (EM=ZD.''L(10)''YYYY) 5X 'OR ' *DATG /// 'TIME INTERNAL :' *TIMX 14X 'OR ' *TIME / ' :' *TIMX (EM=HH.II.SS.T) / ' :' *TIMX (EM=HH.II.SS' 'AP) / ' :' *TIMX (EM=HH) END
プログラム EDITMX05 の出力:
DATE INTERNAL : 2004-12-13
: Monday 51.WEEK 2004
: 348.DAY 2004
ROMAN : MMIV
AMERICAN : 12/13/2004 OR 12/13/2004
JULIAN : 2004348 OR 2004348
GREGORIAN: 13.December2004 OR 13December 2004
TIME INTERNAL : 14:28:49 OR 14:28:49.1
: 14.28.49.1
: 02.28.49 PM
: 14
** Example 'WRITEX10': WRITE (with nT, T*field and P*field)
************************************************************************
DEFINE DATA LOCAL
1 EMPLOY-VIEW VIEW OF EMPLOYEES
2 JOB-TITLE
2 NAME
2 SALARY (1)
2 BONUS (1,1)
END-DEFINE
*
READ (3) EMPLOY-VIEW WITH JOB-TITLE FROM 'SALES PERSON'
DISPLAY NOTITLE NAME 30T JOB-TITLE
VERT AS 'SALARY/BONUS' SALARY(1) BONUS(1,1)
AT BREAK OF JOB-TITLE
WRITE 20T 'AVERAGE' T*JOB-TITLE OLD(JOB-TITLE) (AL=15)
'(SAL)' P*SALARY AVER(SALARY(1)) /
46T '(BON)' P*BONUS AVER(BONUS(1,1)) /
END-BREAK
SKIP 1
END-READ
END
プログラム WRITEX10 の出力:
NAME CURRENT SALARY
POSITION BONUS
-------------------- ------------------------- ----------
SAMUELSON SALES PERSON 32000
6000
PAPAYANOPOULOS SALES PERSON 34000
7000
HELL SALES PERSON 38000
9000
AVERAGE SALES PERSON (SAL) 34666
(BON) 7333
次の例は、「コントロールブレイク」セクションで参照されています。
** Example 'ATBREX06': AT BREAK OF (comparing NMIN, NAVER, NCOUNT with
** MIN, AVER, COUNT)
************************************************************************
DEFINE DATA LOCAL
1 EMPLOY-VIEW VIEW OF EMPLOYEES
2 CITY
2 SALARY (1:2)
END-DEFINE
*
WRITE TITLE '-- SALARY STATISTICS BY CITY --' /
*
READ (2) EMPLOY-VIEW WITH CITY = 'NEW YORK'
DISPLAY CITY 'SALARY (1)' SALARY(1) 15X 'SALARY (2)' SALARY(2)
AT BREAK OF CITY
WRITE /
14T 'S A L A R Y (1)' 39T 'S A L A R Y (2)' /
13T '- MIN:' MIN(SALARY(1)) 38T '- MIN:' MIN(SALARY(2)) /
13T '- AVER:' AVER(SALARY(1)) 38T '- AVER:' AVER(SALARY(2)) /
16T COUNT(SALARY(1)) 'RECORDS' 41T COUNT(SALARY(2)) 'RECORDS' //
13T '- NMIN:' NMIN(SALARY(1)) 38T '- NMIN:' NMIN(SALARY(2)) /
13T '- NAVER:' NAVER(SALARY(1)) 38T '- NAVER:' NAVER(SALARY(2)) /
16T NCOUNT(SALARY(1)) 'RECORDS' 41T NCOUNT(SALARY(2)) 'RECORDS'
END-BREAK
END-READ
END
プログラム ATBREX06 の出力:
-- SALARY STATISTICS BY CITY --
CITY SALARY (1) SALARY (2)
-------------------- ---------- ----------
NEW YORK 17000 16100
NEW YORK 38000 34900
S A L A R Y (1) S A L A R Y (2)
- MIN: 17000 - MIN: 16100
- AVER: 27500 - AVER: 25500
2 RECORDS 2 RECORDS
- NMIN: 17000 - NMIN: 16100
- NAVER: 27500 - NAVER: 25500
2 RECORDS 2 RECORDS
次の例は、「データ計算」セクションで参照されています。
** Example 'WRITEX11': WRITE (with nX, n/n and COMPRESS)
************************************************************************
DEFINE DATA LOCAL
1 EMPLOY-VIEW VIEW OF EMPLOYEES
2 PERSONNEL-ID
2 SALARY (1)
2 FIRST-NAME
2 NAME
2 CITY
2 ZIP
2 CURR-CODE (1)
2 JOB-TITLE
2 LEAVE-DUE
2 ADDRESS-LINE (1)
*
1 #SALARY (A8)
1 #FULL-NAME (A25)
1 #FULL-CITY (A25)
1 #FULL-SALARY (A25)
1 #VACATION (A16)
END-DEFINE
*
READ (3) EMPLOY-VIEW LOGICAL BY PERSONNEL-ID = '2001800'
MOVE SALARY(1) TO #SALARY
COMPRESS FIRST-NAME NAME INTO #FULL-NAME
COMPRESS ZIP CITY INTO #FULL-CITY
COMPRESS 'SALARY :' CURR-CODE(1) #SALARY INTO #FULL-SALARY
COMPRESS 'VACATION:' LEAVE-DUE 'DAYS' INTO #VACATION
/*
DISPLAY NOTITLE 'NAME AND ADDRESS' NAME
5X 'PERS-NO.' PERSONNEL-ID
3X 'JOB TITLE' JOB-TITLE (LC='JOB : ')
WRITE 1/5 #FULL-NAME 1/37 #FULL-SALARY
2/5 ADDRESS-LINE(1) 2/37 #VACATION
3/5 #FULL-CITY
SKIP 1
END-READ
END
プログラム WRITEX11 の出力:
NAME AND ADDRESS PERS-NO. JOB TITLE
-------------------- -------- -----------------------------------
FARRIS 20018000 JOB : PROGRAMMER
JACKIE FARRIS SALARY : USD 30500
918 ELM STREET VACATION: 10 DAY
32306 TALLAHASSEE
EVANS 20018100 JOB : PROGRAMMER
JO EVANS SALARY : USD 31000
1058 REDSTONE LANE VACATION: 11 DAY
68508 LINCOLN
HERZOG 20018200 JOB : PROGRAMMER
JOHN HERZOG SALARY : USD 31500
255 ZANG STREET #253 VACATION: 12 DAY
27514 CHAPEL HILL
** Example 'IFX03': IF
************************************************************************
DEFINE DATA LOCAL
1 EMPLOY-VIEW VIEW OF EMPLOYEES
2 NAME
2 CITY
2 BONUS (1,1)
2 SALARY (1)
*
1 #INCOME (N9)
1 #TEXT (A26)
END-DEFINE
*
WRITE TITLE '-- DISTRIBUTION OF CATALOGS I AND II --' /
*
READ (3) EMPLOY-VIEW BY CITY = 'SAN FRANSISCO'
COMPUTE #INCOME = BONUS(1,1) + SALARY(1)
/*
IF #INCOME > 40000
MOVE 'CATALOGS I AND II' TO #TEXT
ELSE
MOVE 'CATALOG I' TO #TEXT
END-IF
/*
DISPLAY NAME 5X 'SALARY' SALARY(1) / BONUS(1,1)
WRITE T*SALARY '-'(10) /
16X 'INCOME:' T*SALARY #INCOME 3X #TEXT /
16X '='(19)
SKIP 1
END-READ
END
プログラム IFX03 の出力:
-- DISTRIBUTION OF CATALOGS I AND II --
NAME SALARY
BONUS
-------------------- ----------
COLVILLE JR 56000
0
----------
INCOME: 56000 CATALOGS I AND II
===================
RICHMOND 9150
0
----------
INCOME: 9150 CATALOG I
===================
MONKTON 13500
600
----------
INCOME: 14100 CATALOG I
===================
** Example 'COMPRX03': COMPRESS (using parameters LC and TC)
************************************************************************
DEFINE DATA LOCAL
1 EMPLOY-VIEW VIEW OF EMPLOYEES
2 CITY
2 SALARY (1)
2 CURR-CODE (1)
2 LEAVE-DUE
2 NAME
2 FIRST-NAME
2 JOB-TITLE
*
1 #SALARY (N9)
1 #FULL-SALARY (A25)
1 #VACATION (A11)
END-DEFINE
*
READ (3) EMPLOY-VIEW WITH CITY = 'BOSTON'
MOVE SALARY(1) TO #SALARY
COMPRESS 'SALARY :' CURR-CODE(1) #SALARY INTO #FULL-SALARY
COMPRESS 'VACATION:' LEAVE-DUE INTO #VACATION
/*
DISPLAY NOTITLE NAME FIRST-NAME
'JOB DESCRIPTION' JOB-TITLE (LC='JOB : ') /
'/' #FULL-SALARY /
'/' #VACATION (TC='DAYS')
SKIP 1
END-READ
END
プログラム COMPRX03 の出力:
NAME FIRST-NAME JOB DESCRIPTION
-------------------- -------------------- -----------------------------------
SHAW LESLIE JOB : SECRETARY
SALARY : USD 18000
VACATION: 2DAYS
STANWOOD VERNON JOB : PROGRAMMER
SALARY : USD 31000
VACATION: 1DAYS
CREMER WALT JOB : SECRETARY
SALARY : USD 20000
VACATION: 3DAYS
次の例は、「システム変数とシステム関数」で参照されているものです。
** Example 'EDITMX05': Edit mask (EM for date and time system variables) ************************************************************************ WRITE NOTITLE // 'DATE INTERNAL :' *DATX (DF=L) / ' :' *DATX (EM=N(9)' 'ZW.'WEEK 'YYYY) / ' :' *DATX (EM=ZZJ'.DAY 'YYYY) / ' ROMAN :' *DATX (EM=R) / ' AMERICAN :' *DATX (EM=MM/DD/YYYY) 12X 'OR ' *DAT4U / ' JULIAN :' *DATX (EM=YYYYJJJ) 15X 'OR ' *DAT4J / ' GREGORIAN:' *DATX (EM=ZD.''L(10)''YYYY) 5X 'OR ' *DATG /// 'TIME INTERNAL :' *TIMX 14X 'OR ' *TIME / ' :' *TIMX (EM=HH.II.SS.T) / ' :' *TIMX (EM=HH.II.SS' 'AP) / ' :' *TIMX (EM=HH) END
プログラム EDITMX05 の出力:
DATE INTERNAL : 2004-12-13
: Monday 51.WEEK 2004
: 348.DAY 2004
ROMAN : MMIV
AMERICAN : 12/13/2004 OR 12/13/2004
JULIAN : 2004348 OR 2004348
GREGORIAN: 13.December2004 OR 13December 2004
TIME INTERNAL : 14:36:58 OR 14:36:58.8
: 14.36.58.8
: 02.36.58 PM
: 14
** Example 'READX04': READ (in combination with FIND and the system
** variables *NUMBER and *COUNTER)
************************************************************************
DEFINE DATA LOCAL
1 EMPLOY-VIEW VIEW OF EMPLOYEES
2 PERSONNEL-ID
2 NAME
2 FIRST-NAME
1 VEHIC-VIEW VIEW OF VEHICLES
2 PERSONNEL-ID
2 MAKE
END-DEFINE
*
LIMIT 10
RD. READ EMPLOY-VIEW BY NAME STARTING FROM 'JONES'
FD. FIND VEHIC-VIEW WITH PERSONNEL-ID = PERSONNEL-ID (RD.)
IF NO RECORDS FOUND
ENTER
END-NOREC
/*
DISPLAY NOTITLE
*COUNTER (RD.)(NL=8) NAME (AL=15) FIRST-NAME (AL=10)
*NUMBER (FD.)(NL=8) *COUNTER (FD.)(NL=8) MAKE
END-FIND
END-READ
END
プログラム READX04 の出力:
CNT NAME FIRST-NAME NMBR CNT MAKE
--------- --------------- ---------- --------- --------- --------------------
1 JONES VIRGINIA 1 1 CHRYSLER
2 JONES MARSHA 2 1 CHRYSLER
2 JONES MARSHA 2 2 CHRYSLER
3 JONES ROBERT 1 1 GENERAL MOTORS
4 JONES LILLY 2 1 FORD
4 JONES LILLY 2 2 MG
5 JONES EDWARD 1 1 GENERAL MOTORS
6 JONES MARTHA 1 1 GENERAL MOTORS
7 JONES LAUREL 1 1 GENERAL MOTORS
8 JONES KEVIN 1 1 DATSUN
9 JONES GREGORY 1 1 FORD
10 JOPER MANFRED 0 0
** Example 'WTITLX01': WRITE TITLE (with *PAGE-NUMBER)
************************************************************************
DEFINE DATA LOCAL
1 VEHIC-VIEW VIEW OF VEHICLES
2 MAKE
2 YEAR
2 MAINT-COST (1)
END-DEFINE
*
LIMIT 5
*
READ VEHIC-VIEW
END-ALL
SORT BY YEAR USING MAKE MAINT-COST (1)
DISPLAY NOTITLE YEAR MAKE MAINT-COST (1)
AT BREAK OF YEAR
MOVE 1 TO *PAGE-NUMBER
NEWPAGE
END-BREAK
/*
WRITE TITLE LEFT JUSTIFIED
'YEAR:' YEAR 15X 'PAGE' *PAGE-NUMBER
END-SORT
END
プログラム WTITLX01 の出力:
YEAR: 1980 PAGE 1
YEAR MAKE MAINT-COST
----- -------------------- ----------
1980 RENAULT 20000
1980 RENAULT 20000
1980 PEUGEOT 20000
次の例は、「システム変数とシステム関数」で参照されているものです。
** Example 'ATBREX06': AT BREAK OF (comparing NMIN, NAVER, NCOUNT with
** MIN, AVER, COUNT)
************************************************************************
DEFINE DATA LOCAL
1 EMPLOY-VIEW VIEW OF EMPLOYEES
2 CITY
2 SALARY (1:2)
END-DEFINE
*
WRITE TITLE '-- SALARY STATISTICS BY CITY --' /
*
READ (2) EMPLOY-VIEW WITH CITY = 'NEW YORK'
DISPLAY CITY 'SALARY (1)' SALARY(1) 15X 'SALARY (2)' SALARY(2)
AT BREAK OF CITY
WRITE /
14T 'S A L A R Y (1)' 39T 'S A L A R Y (2)' /
13T '- MIN:' MIN(SALARY(1)) 38T '- MIN:' MIN(SALARY(2)) /
13T '- AVER:' AVER(SALARY(1)) 38T '- AVER:' AVER(SALARY(2)) /
16T COUNT(SALARY(1)) 'RECORDS' 41T COUNT(SALARY(2)) 'RECORDS' //
13T '- NMIN:' NMIN(SALARY(1)) 38T '- NMIN:' NMIN(SALARY(2)) /
13T '- NAVER:' NAVER(SALARY(1)) 38T '- NAVER:' NAVER(SALARY(2)) /
16T NCOUNT(SALARY(1)) 'RECORDS' 41T NCOUNT(SALARY(2)) 'RECORDS'
END-BREAK
END-READ
END
プログラム ATBREX06 の出力:
-- SALARY STATISTICS BY CITY --
CITY SALARY (1) SALARY (2)
-------------------- ---------- ----------
NEW YORK 17000 16100
NEW YORK 38000 34900
S A L A R Y (1) S A L A R Y (2)
- MIN: 17000 - MIN: 16100
- AVER: 27500 - AVER: 25500
2 RECORDS 2 RECORDS
- NMIN: 17000 - NMIN: 16100
- NAVER: 27500 - NAVER: 25500
2 RECORDS 2 RECORDS
** Example 'ATENPX01': AT END OF PAGE (with system function available
** via GIVE SYSTEM FUNCTIONS in DISPLAY)
************************************************************************
DEFINE DATA LOCAL
1 EMPLOY-VIEW VIEW OF EMPLOYEES
2 PERSONNEL-ID
2 NAME
2 JOB-TITLE
2 SALARY (1)
END-DEFINE
*
READ (10) EMPLOY-VIEW BY PERSONNEL-ID = '20017000'
DISPLAY NOTITLE GIVE SYSTEM FUNCTIONS
NAME JOB-TITLE 'SALARY' SALARY(1)
/*
AT END OF PAGE
WRITE / 24T 'AVERAGE SALARY: ...' AVER(SALARY(1))
END-ENDPAGE
END-READ
END
プログラム ATENPX01 の出力:
NAME CURRENT SALARY
POSITION
-------------------- ------------------------- ----------
CREMER ANALYST 34000
MARKUSH TRAINEE 22000
GEE MANAGER 39500
KUNEY DBA 40200
NEEDHAM PROGRAMMER 32500
JACKSON PROGRAMMER 33000
PIETSCH SECRETARY 22000
PAUL SECRETARY 23000
HERZOG MANAGER 48500
DEKKER DBA 48000
AVERAGE SALARY: ... 34270