0% found this document useful (0 votes)
40 views58 pages

Program Name: Average / Average: Procedure Options (Main)

The document contains multiple PL/1 code snippets demonstrating various PL/1 programming concepts like procedures, variables, file handling, conditional logic, loops, and subroutines. One code snippet shows calculating the average grade of students by getting a list of grades, summing them, and dividing by the number of grades. Another snippet shows calculating the area of two different triangles by getting side lengths and calling built-in functions.

Uploaded by

t_satya_pratap
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
40 views58 pages

Program Name: Average / Average: Procedure Options (Main)

The document contains multiple PL/1 code snippets demonstrating various PL/1 programming concepts like procedures, variables, file handling, conditional logic, loops, and subroutines. One code snippet shows calculating the average grade of students by getting a list of grades, summing them, and dividing by the number of grades. Another snippet shows calculating the area of two different triangles by getting side lengths and calling built-in functions.

Uploaded by

t_satya_pratap
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
You are on page 1/ 58

/*Program Name : Average */ AVERAGE : PROCEDURE OPTIONS(MAIN); GET LIST(A,B,C,D,E) ; SUM = A + B+C+D+E ; AVERAGE_GRADE = SUM / 5;

PUT LIST ( AVERAGE GRADE IS , AVERAGE_GRADE) ;

END AVERAGE ;

PL/1
PUT LIST (50,ABC,123,127) ; PUT LIST(23,86,87);

PL/1
PUT PAGE LIST('ABC'); PUT SKIP LIST(123); PUT SKIP(2) LIST(127); PUT PAGE LINE (10) LIST(A,B,C) ;

PL/1
AREA: PROCEDURE OPTIONS(MAIN); GET LIST (BASA,HIGHT,SIDE1,SIDE2,SIDE3); AREA_TRANGLE=BASE/2*HIGHT; PUT PAGE LIST (AREA OF TRANGLE IS, AREA_TRANGLE); SUM=(SIDE1+SIDE2+SIDE3)/2; AREA_TRANGLE2=(SUM*(SUM-SIDE1)*(SUM-SIDE2) *(SUM-SIDE3)) ** .5; PUT SKIP LIST(AREA OF TRANGLE 2 IS, AREA_TRANGLE2); END AREA;

PL/1
DCL variable_name BASE SCALE Precision DECLARE PRICE Decimal FIXED(5.2); DCL A DECIMAL; DCL C FIXED; DCL COUNT FIXED DEC(5) INIT (0) ; DCL TITLE CHAR(13) INIT( Weekly News);

PL/1

PL/1
DCL NAME CHAR(20) VARYING ; DCL NAME CHAR(20) INITIAL (IBM GLOBAL SERVICES); DCL FIRST CHAR(3) DEFINED NAME; DECLARE LIST CHARACTER (40) , A_LIST CHARACTER (10) DEFINED LIST , B_LIST CHARACTER (20) DEFINED LIST POSTION (21) , C_LIST CHARACTER (10) DEFINED LIST POSTION (11);

PL/1
INVOKING Procedure PROG: PROC OPTIONS(MAIN) ---------------CALL SUBRT(X,Y,Z) ; (Arguments) --------------------END PROG ; INVOKED Procedure SUBRT : PROCEDURE (A,B,C) ;(Parameters) --------------------END SUBRT ;

PL/1

PL/1
Z=CALC(X,Y);

Call SUBRT(8.5,X-Y,Z);

SUBRT:PROG (A,B,C) ; DCL A FIXED DEC(7,2); DCL B FIXED DEC(7,2); END SUBRT ;

PL/1
Prog1: PROCEDURE OPTIONS(MAIN) DCL SUBRT ENTRY (FIXED(7,2),FIXED(7,2),FIXED(8,2));

DCL (X,Y,Z) FLOAT DEC(6); GET LLST (X.Y); CALL SLBRI (X,Y,Z); END Prog1 ; SUBRT: PROCEDURE(A,B,C); DCL (A,B,C) FIXED DECIMAL(7,2) C = A + B; END SUBRT;

PL/1
MAINPR: PROCEDURE OPTIONS(MAIN); DCL CALC ENTRY RETURNS (FIXED DEC(7)); DCL SUM FIXED DEC(7); GET LIST(A,B,C); SUM=CALC(A,B,C) ; .. END MAINPR ; CALC:PROC(X,Y,Z) RETURNS (FIXED DECIMAL); RETURN(A+B+C); END CALC;

PL/1
Prog1: PROCEDURE OPTIONS(MAIN) DCL SUBRT ENTRY (FIXED(7,2),FIXED(7,2),FIXED(8,2)); DCL (X,Y,Z) FLOAT DEC(6); GET LLST (X,Y,Z); CALL ADD3 (X,Y,Z); END Prog1 ; ADD3: PROCEDURE(A,B,C); DCL (A,B) FIXED DECIMAL(7,2) ; DCL C FIXED DECIMAL(8,2) ; C = A + B+C; END ADD3;

PL/1
DECLARE X ENTRY EXTERNAL ; CALC X(PARAMETER) ;

DCL SUB ENTRY OPTIONS(ASSEMBLER); DCL SUB ENTRY OPTIONS(COBOL) ;


MAIN: PROC(PARM) OPTIONS(MAIN NOEXECOPS); DCL PARM CHAR(n) VARYING;

PL/1
FULL_NAME1 = FIRST_NAME || LAST_NAME; (Concatenation) DCL PATTERN BIT(32); PATTERN = (2)1B || (2)0B;

PL/1
ABS: X = -3.714;Y = ABS(X); /* Y = 3.714 */ CEIL: X = 3.32; Y = CEIL(X); /* Y = 4.00 */

FLOOR: X = -3.32;Y = CEIL(X);/* Y = -3.00 */

MIN,MAX: X = 100; Y = 32.76 ; Z = -6; W = MIN(X,Y,Z); /* W = -6 */ W = MAX(X,Y,Z); /* W = 100 */

PL/1
TRUNC: DCL (X,Y) DECIMAL FIXED(3,2); X = 3.32; Y = TRUNC(X); /* Y = 3.00 */ SIGN: X = 123; I = SIGN(X) ; /* I = 1 */ X = -175; I = SIGN(X); /* I = -1 */ X = 0; I = SIGN(X); /* I = 0 */ MOD:MOD(10,8) = 2; MOD(29,6) = 5

PL/1
DATE and TIME : DCL TODAY char (6) ; DCL FULLTIME CHAR(9) TODAY = DATE; FULLTIME = TIME ; SUBSTR: MONTH = SUBSTR (TODAY,3,2) ; DAY =SUBSTR (TODAY,5,2) ; YEAR = SUBSTR (TODAY,1,2) ;
TODAY_EDITED = MONTH|| /||DAY||/||YEAR; LENGTH:DCL NAME CHAR(30) VARYING INIT(MOHAN PERI);
LTH = LENGTH (NAME); /* LTH = 10 */

PL/1
LENGTH:DCL NAME CHAR(30) VARYING INIT(MOHAN PERI); LTH = LENGTH (NAME); /* LTH = 10 */

INDEX: DCL SENTENCE CHAR(40); SENTENCE = WIN TEAM EXECUTE PCB; START = INDEX(SENTENCE,PCB); /* START = 18 */
SUBSTR(SENTENCE,START,3) = PBC;
/*WIN TEAM EXECUTE PBC*/

PL/1
/*From Main Program*/ CALL CENTER_HEADING(WEEKLY ACTIVE REPORT,PRINT_LINE); /*EXTERNAL PROGRAM*/ CENETR_HEADING: PROCEDURE (HEADING ,OUTPUT_AREA); DECLARE HEADING CHAR(*); DECLARE LENGTH_OF_STRING FIXED BIN(15,0); DECALRE OUTPUT_AREA CHAR(133); DECALARE STAR FIXED BIN(15,0); DECALRE LENGTH BUILTIN; DECLARE SUBSTR BUILTIN; LENGTH_OF_STRING= LENGTH(HEADING); STAR =(132- LENGTH_OF_STRING)/2+1; SUBSTAR(OUTPUT_AREA,START, LENGTH_OF_STRING)= HEADING ; END CENTER_HEADING

PL/1
/*From Main Program*/ CALL PRORATE(MONTHLY_RENT,DAY_IN,RENT_DUE,ERROR); /*EXTERNAL PROGRAM*/ PRORATE:PROCEDURE(RENT,MOVE_IN_DAY,R_DUE,D_ERROR); DECLARE DECLARE DECLARE DECLARE DECLARE DECLARE DECLARE D_ERROR BIT(1); DAYS_REMAING FIXED DECIMAL(2); MOVE_IN_DAY FIXED DECIMAL(2); RENT FIXED DECIMAL(5,2); R_DUE FIXED DECIMAL(5,2); (NO,YES) BIT(1); RENT_PER_DAY FIXED DECIMAL(5,2);

PL/1
IF MOVE_IN_DAY > 31 THEN D_ERROR = YES; ELSE DO; D_ERROR = NO; DAYS_REMAING= 31- MOVE_IN_DAY; RENT_PER_DAY =RENT/30 ; IF MOVE_IN_DAY = 1| MOVE_IN_DAY = 31 THEN THEN R_DUE = RENT ; ELSE R_DUE = DAYS_REMAING * RENT_PER_DAY END PRORATE ;

PL/1

PL/1
SELECT (SHIP_CODE); WHEN (110) CALL SHIP_BEST_WAY_CODE; WHEN (120) CALL SHIP_UPS_REGULAR; WHEN (130) CALL SHIP_UPS_BLUE_LABEL; WHEN (140) CALL SH1P_UPS_RED_LABEL; OTHERWISE CALL SHIP_CODE_ERROR; END;

PL/1

DO WHILE(X>0); .. .. END ,

PL/1

DO UNTIL (X>0); . . END ,

PL/1
J = 100; K = 5 DO I = 1 TO J BY K ; DO I = 1 TO 100 BY 5 ; DO K = 5 TO 1 BY -1; DO I = 1 TO 100; DO I = K*2 TO K*5 BY J-4; DO B = 1.5 TO 10 BY 0.025; DO K = 1 TO 10, 21 TO 30 , 41 TO 50; DO I = 1 BY 1; DO J = 1,8,9,11,6,13; DO K = 1 TO 10 WHILE(X>100);

PL/1
SURNAME : PROCEDURE OPTIONS ( MA I N ) ; DCL FIRST_CHAR FIXED BINARY (15,0) DCL FULL_NAME CHAR (40) ; DCL LAST_CHAR FIXED BINARY (15,0) DCL LENGTH_OF_NAME FIXED BINARY (15,0) DCL MORE_RECORDS BIT(1) INIT(1 B) DCL NO BIT(1) INIT(0 B) DCL SUBSTR BUILTIN ; ON ENDFILE (SYSIN) MORE RECORDS = NO;

PL/1
PUT PAGE LIST ('FIRST NAME FIRST ' , ' ',LAST NAME FIRST); PUT SKIP (2) ; GET LI ST (FULL NAME); PUT SKIP LIST(FULL_NAME) ; DO WH I LE (M0RE_REC0RDS); DO LAST_CHAR = 40 TO 1 BY -1 WH I LE( SUBSTR ( FULL_NAME, LAST_CHAR, 1) = ' '); END; DO FIRST_CHAR = LASTCHAR TO 1 BY -1 UNTI L( SUBSTR ( FULL_NAME, FIRST_CHAR, 1 ) = ' '); END;

PL/1
LENGTH_OF_NAME = LAST_CHAR - FIRST_CHAR; FIRSTCHAR = FIRST_CHAR + 1; IF FIRST_CHAR > 1 THEN FULL_NAME = SUBSTR ( FULL_NAME , F I RST_CHAR , LENGTH_OF_NAME ) || , || SUBSTR (FULL_NAME, 1, F I RST_CHAR - 1); PUT LIST (FULL_NAME); GET LI ST (FULL NAME); PUT SKIP LIST (FULLL_NAME) ; END; END SURNAME;

PL/1
DCL DAYS(365) FIXED DEC(4,1);

DCL LIST(-2 : 6) FIXED BIN (15 , 0) INIT (91,20,82,11,73,48,19,16,70);

PL/1
DCL TABLE(6,2) FIXED DEC (5) ; DCL AXIS(-3:3,-4:4) FLOAT DEC (6) INIT ((63) 0) ;

PL/1
DCL COMMISSION (5,3) FIXED DEC (4,3) ;

PL/1
DCL X (5) FIXED BIN (15 ,0) INIT ( 10, 20, 30, 40, 50)

DCL Y (3) FIXED BIN (15,0) INIT (3, 2,1)


I=3 ; Z=X(Y(1))

PL/1
DCL INFILE FILE STREAM INPUT;

//INFILE

DD

DSN=PARTS.INSTOCK, . . .
FILE RECORD {INPUT | OUTPUT | UPDATE} {SEQUENTIAL | DIRECT} [KEYED] ENVIRONMENT( CONSECUTIVE | VSAM, RECSIZE(n), BLKSIZE(n), F | FB | V | VB . . .)

DCL file-constant

PL/1
READ FILE (file-reference) [INTO(reference) [KEY(expression) | KEYTO (reference) ]] WRITE FILE (file-reference) FROM (reference) [KEYFROM (expression) | KEYTO (reference) ]]

DELETE FILE (file-reference) [KEY (expression)]

PL/1
DCL INFILE FILE INPUT RECORD ENV(F RECSIZE(80)); DCL OUTFILE FILE OUTPUT RECORD ENV(F RECSIZE(80)); DCL DATA_AREA CHAR(80); OPEN FILE(INFILE),FILE(OUTFILE); . READ FILE(INFILE) INTO (DATA_AREA); WRITE FILE(OUTFILE) FROM(DATA_AREA); . . CLOSE FILE(INFILE),FILE(OUTFILE);

PL/1
SAMPLE2: PROC OPTIONS(MAIN); DCL INFILE FILE RECORD INPUT; DCL EOF_INF BIT(1) INIT('0'B); ON ENDFILE(INFILE) BEGIN; EOF_INF = '1'B; END; /*INPUT FILE STRUCTURES */ DCL 1 IN_REC, 2 IT_NO FIXED DEC(5) INIT(0), 2 FILL1 CHAR(1) INIT(' '), 2 IT_NM CHAR(20) INIT(' '), 2 FILL2 CHAR(1) INIT(' '), 2 QUANTITY FIXED DEC(3) INIT(0), 2 FILL3 CHAR(1) INIT(' '), 2 AMOUNT FIXED DEC(5,2) INIT(0), 2 FILLER CHAR(49) INIT(' ');

PL/1
/* OTHER INPUT AND OUTPUT VARIABLE */ DCL AVG_IN FIXED DEC(10,4) INIT(0); DCL AVG_OUT FIXED DEC(10,4) INIT(0); DCL RANGE_IN FIXED DEC(4) INIT(0); DCL RANGE_OT FIXED DEC(4) INIT(0); DCL AMT_IN FIXED DEC(10,4) INIT(0); DCL AMT_OUT FIXED DEC(10,4) INIT(0); DCL TOTAL_COUNT FIXED DEC(3) INIT(0);

PL/1
OPEN FILE(INFILE) INPUT; READ FILE(INFILE) INTO(IN_REC); IF EOF_INF = '1'B THEN DO; PUT SKIP LIST ('EMPTY INPUT FILE '); END; DO WHILE (EOF_INF = '0'B); TOTAL_COUNT = TOTAL_COUNT + 1; IF TOTAL_COUNT >= 60 & TOTAL_COUNT <= 100 THEN DO; RANGE_IN = RANGE_IN + 1; AMT_IN = AMT_IN + IN_REC.AMOUNT; END; ELSE DO; RANGE_OT = RANGE_OT + 1; AMT_OUT = AMT_OUT + IN_REC.AMOUNT; END; READ FILE(INFILE) INTO(IN_REC); END;

PL/1
AVG_IN = AMT_IN / RANGE_IN ; AVG_OUT = AMT_OUT / RANGE_OT; PUT SKIP LIST (' TOTAL RECORDS = '||TOTAL_COUNT); PUT SKIP LIST (' COUNT 1 TO 59 RECORDS = '||RANGE_OT); PUT SKIP LIST (' COUNT 60 TO 100 RECORDS = '||RANGE_IN); PUT SKIP LIST (' AMOUNT 60 TO 100 RECORDS = '||AMT_IN); PUT SKIP LIST (' AMOUNT 1 TO 59 RECORDS = '||AMT_OUT); PUT SKIP LIST (' AVERAGE 60 TO 100 RECORDS = '||AVG_IN); PUT SKIP LIST (' AVERAGE 1 TO 59 RECORDS = '||AVG_OUT); CLOSE FILE(STORE1); END SAMPLE2;

PL/1
PROC OPTIONS (MAIN); DCL INFILE RECORD INPUT; DCL OUTFILE RECORD OUTPUT; DCL INP_EOF BIT(1) INIT('0'B); /* SET ON CONDITION FOR THE INPUT FILE */ ON ENDFILE (INFILE) BEGIN; INP_EOF = '1'B; END; /* OPEN THE INPUT AND OUTPUT FILES */ OPEN FILE (INFILE) ; OPEN FILE (OUTFILE);

PL/1
/*INPUT FILE STRUCTURES */ DCL 1 IN_REC, 2 NAME1 CHAR(20) INIT(' '), 2 FILL1 CHAR(1) INIT(','), 2 STREET CHAR(20) INIT(' '), 2 FILL2 CHAR(1) INIT(','), 2 TOWN CHAR(20) INIT(' '), 2 FILLER CHAR(18) INIT(' '); /* DECLARE THE OUTPUT FILE STRUCTURE */ DCL OUT_STR1 CHAR(80) ; DCL OUT_STR2 CHAR(80) ; DCL OUT_STR3 CHAR(80) ;

PL/1
DO WHILE(INP_EOF = '0'B); READ FILE(INFILE) INTO(IN_REC); IF INP_EOF = '0'B THEN DO; OUT_STR1 = ' '; OUT_STR2 = ' '; OUT_STR3 = ' '; CALL CON_STR; WRITE FILE(OUTFILE) FROM(OUT_STR1); WRITE FILE(OUTFILE) FROM(OUT_STR2); WRITE FILE(OUTFILE) FROM(OUT_STR3); END; END; CLOSE FILE(INFILE); CLOSE FILE(OUTFILE);

PL/1
/* CON_STRSTARTS HERE */ CON_STR : PROC; OUT_STR1 = IN_REC.NAME1; OUT_STR2 = IN_REC.STREET; OUT_STR3 = IN_REC.TOWN; END CON_STR; END SAMPLE4;
input file

BROWSE R04968.KARTHIK.FILE4 Line 00000000 Col 001 080 +----1----+----2----+----3----+----4----+----5----+----6----+----7---8 ******************** Top of Data ************************ Gopal ,Ameerpet ,Hyderabad **************** Bottom of Data**************************

PL/1
PROC OPTIONS (MAIN); DCL INFILE RECORD INPUT; DCL OUTFILE RECORD OUTPUT; DCL EOFIN BIT(1) INIT('0'B); /* SET ON CONDITION FOR THE INPUT FILE */ ON ENDFILE (INFILE) BEGIN; EOFIN = '1'B; END; /* OPEN THE INPUT AND OUTPUT FILES */ OPEN FILE (INFILE) ; OPEN FILE (OUTFILE);

PL/1
DCL IN_STR CHAR(80) VARYING; DCL OUT_STR CHAR(80) VARYING ; DCL OUT_STR1 CHAR(80) ; DO WHILE(EOFIN = '0'B); READ FILE(INFILE) INTO(IN_STR); IF EOFIN = '0'B THEN DO; OUT_STR = ' '; CALL REV_STR; OUT_STR1 = TRIM(OUT_STR); WRITE FILE(OUTFILE) FROM(OUT_STR1); END; END; CLOSE FILE(INFILE); CLOSE FILE(OUTFILE);

PL/1
REV_STR : PROC; DCL LEN_STR FIXED BINARY(15,0); DCL J FIXED DECIMAL(2) INIT(0); DCL I FIXED DECIMAL(2) INIT(1); LEN_STR = LENGTH(IN_STR); DO WHILE(SUBSTR(IN_STR,I,1) = ' '); I = I + 1; END; J = LEN_STR; DO WHILE (J -I + 1 > 0); OUT_STR = OUT_STR || SUBSTR(IN_STR,J,1); J = J - 1; END; END REV_STR; END SAMPLE3;

PL/1
DCL vfile file record direct keyed input env ( vsam ); DCL amast file record direct input env(vsam); dcl 1 area, 2 kskey char(5), 2 ksname char(15); read file(amast ) into(area) key('00010');

PL/1
dcl kmast file record direct update env(vsam); dcl 1 area, 2 kskey char(5) init('00081'), 2 ksname char(15); read file( kmast ) into(area) key(kskey); /* amend */ rewrite file( kmast ) from(area) key(kskey); kskey = '00056'; Delete file( ksds ) key(kskey); kskey = '00024'; ksname = 'Applets'; write file(ksds) from(area) keyfrom(kskey);

PL/1
GENKEY option e.g. :- dcl vsam file record sequential keyed env(vsam genkey); read file( vmast ) into(area) key('123'); read file( vmast ) into(area); ESDS dcl esds file record sequential keyed update env(vsam); dcl rba char(4); read file(esds) into(area) keyto(rba); rewrite file(esds) from(area) key(rba); write file(esds) from(area) keyto(rba); record-1 : record-2 : record-3 : record-4 : : : 50 bytes : 40 bytes : 60 bytes : 30 bytes : : : rba=0 rba=50 rba=90 rba=150

PL/1
dcl rrds file record sequential keyed update env(vsam); dcl rrkey char(8); rrkey = ('00000025'); read file( rrds ) into(area) key( rrkey ); /* read rel.rec.no 25 */ ...... rewrite file( rrds) from(area); /* rec.no 25 is rewritten */ ...... write file(rrds) from(area) keyfrom( relrecno );

delete file(rrds) key( relrecno );

PL/1
PLIDB21: PROC OPTIONS(MAIN); DCL DATA_LEN FIXED BIN(31) INIT(132); DCL DATA_DIM FIXED BIN(31) INIT(10); DCL DSNTIAR EXTERNAL ENTRY OPTIONS(ASM,INTER,RETCODE); DCL 1 ERROR_MESSAGE AUTOMATIC, 3 ERROR_LEN FIXED BIN(15) UNAL INIT((DATA_LEN*DATA_DIM)), 3 ERROR_TEXT(DATA_DIM) CHAR(DATA_LEN); DCL INFILE FILE STREAM INPUT; DCL (ADDR,NULL) BUILTIN; OPEN FILE(SYSPRINT) LINESIZE(132); EXEC SQL INCLUDE SQLCA; EXEC SQL INCLUDE TESTPLI;

PL/1
DCL EOF BIT(1) INIT('0'B); ON ENDFILE(INFILE) EOF='1'B; DCL LINE CHAR(80) BASED(PTR); PTR=ADDR(DCLTESTPLI); GET FILE(INFILE) EDIT (LINE)(A(80)); DO WHILE (EOF); EXEC SQL INSERT INTO TESTPLI (CUSTNO,CUSTDTLS) VALUES (:CUSTNO,:CUSTDTLS); PUT SKIP EDIT('SQLCODE:-',SQLCODE)(A,A); IF SQLCODE =0 THEN DO; CALL DSNTIAR ( SQLCA, ERROR_MESSAGE, DATA_LEN ); DO I=1 TO DATA_DIM; PUT SKIP EDIT(ERROR_TEXT(I))(A); END; END; GET FILE(INFILE) EDIT(LINE) (A(80)); END; END PLIDB21;

PL/1
PLIDB22: PROC OPTIONS(MAIN); DCL DATA_LEN FIXED BIN(31) INIT(132); DCL DATA_DIM FIXED BIN(31) INIT(10); DCL DSNTIAR EXTERNAL ENTRY OPTIONS(ASM,INTER,RETCODE); DCL 1 ERROR_MESSAGE AUTOMATIC, 3 ERROR_LEN FIXED BIN(15) UNAL INIT((DATA_LEN*DATA_DIM)), 3 ERROR_TEXT(DATA_DIM) CHAR(DATA_LEN); DCL (ADDR,NULL) BUILTIN; EXEC SQL INCLUDE TESTPLI; EXEC SQL DECLARE INCURSOR CURSOR FOR SELECT CUSTNO, CUSTDTLS FROM TESTPLI; EXEC SQL INCLUDE SQLCA;

PL/1
OPEN FILE(SYSPRINT) LINESIZE(132); EXEC SQL OPEN INCURSOR; IF SQLCODE =0 THEN DO; CALL ERR_ROUTINE; STOP; END; DO WHILE (SQLCODE=0); EXEC SQL FETCH INCURSOR INTO :CUSTNO,:CUSTDTLS; IF SQLCODE =0 THEN CALL ERR_ROUTINE; ELSE PUT SKIP EDIT(CUSTNO,CUSTDTLS)(A); END; EXEC SQL CLOSE INCURSOR;

PL/1
ERR_ROUTINE: PROC; PUT SKIP EDIT('SQLCODE:-',SQLCODE)(A,A); CALL DSNTIAR ( SQLCA, ERROR_MESSAGE, DATA_LEN ); DO I=1 TO DATA_DIM; PUT SKIP EDIT(ERROR_TEXT(I))(A); END; END ERR_ROUTINE; END PLIDB22;

PL/1
SURNAME : PROCEDURE OPTIONS ( MA I N ) ; DCL FIRST_CHAR FIXED BINARY (15,0) DCL FULL_NAME CHAR (40) ; DCL LAST_CHAR FIXED BINARY (15,0) DCL LENGTH_OF_NAME FIXED BINARY (15,0) DCL MORE_RECORDS BIT(1) INIT(1 B) DCL NO BIT(1) INIT(0 B) DCL SUBSTR BUILTIN ; ON ENDFILE (SYSIN) MORE RECORDS = NO;

You might also like