IDENTIFICATION DIVISION .
PROGRAM-ID . DML076.
ENVIRONMENT DIVISION .
CONFIGURATION SECTION .
SOURCE-COMPUTER . xyz.
OBJECT-COMPUTER . xyz.
DATA DIVISION .
WORKING-STORAGE SECTION .
* Standard COBOL (file "DML076.SCO") calling SQL
* procedures in file "DML076.MCO".
* STANDARD COBOL (file "DML076.SCO")
*********************************************************
*
* COMMENT SECTION
*
* DATE 1991/06/18 STANDARD COBOL LANGUAGE
* NIST SQL VALIDATION TEST SUITE V6.0
* DISCLAIMER:
* This program was written by employees of NIST to test SQL
* implementations for conformance to the SQL standards.
* NIST assumes no responsibility for any party's use of
* this program.
*
* DML076.SCO
* WRITTEN BY: YOLANDA HERD
*
* THIS ROUTINE TESTS NULLS AND CURSORS
*
* REFERENCES
* AMERICAN NATIONAL STANDARD database language - SQL
* X3.135-1989
*
* SECTION 4.2
* DATA TYPES, DEFINITION OF NULL
* SECTION 8.10, GR 8
*
*********************************************************
* EXEC SQL BEGIN DECLARE SECTION END-EXEC
01 CHARTP PIC X(1 ).
01 INTTP PIC S9(9 ) DISPLAY SIGN LEADING SEPARATE .
01 REALTP-SUB PIC S9(6 )V99 DISPLAY SIGN LEADING SEPARATE .
01 SMLTP PIC S9(4 ) DISPLAY SIGN LEADING SEPARATE .
01 NUMTP PIC S9(9 ) DISPLAY SIGN LEADING SEPARATE .
01 DECTP PIC S9(9 ) DISPLAY SIGN LEADING SEPARATE .
01 GRDE PIC S9(9 ) DISPLAY SIGN LEADING SEPARATE .
01 NME1 PIC X(20 ).
01 NME2 PIC X(20 ).
01 CITY1 PIC X(15 ).
01 VAR1 PIC X(3 ).
01 indic1 PIC S9(4 ) DISPLAY SIGN LEADING SEPARATE .
01 indic2 PIC S9(4 ) DISPLAY SIGN LEADING SEPARATE .
01 indic3 PIC S9(4 ) DISPLAY SIGN LEADING SEPARATE .
01 indic4 PIC S9(4 ) DISPLAY SIGN LEADING SEPARATE .
01 indic5 PIC S9(4 ) DISPLAY SIGN LEADING SEPARATE .
01 indic6 PIC S9(4 ) DISPLAY SIGN LEADING SEPARATE .
01 indic7 PIC S9(4 ) DISPLAY SIGN LEADING SEPARATE .
01 indic8 PIC S9(4 ) DISPLAY SIGN LEADING SEPARATE .
01 indic9 PIC S9(4 ) DISPLAY SIGN LEADING SEPARATE .
01 indicx PIC S9(4 ) DISPLAY SIGN LEADING SEPARATE .
01 count1 PIC S9(9 ) DISPLAY SIGN LEADING SEPARATE .
01 count2 PIC S9(9 ) DISPLAY SIGN LEADING SEPARATE .
01 count3 PIC S9(9 ) DISPLAY SIGN LEADING SEPARATE .
01 count4 PIC S9(9 ) DISPLAY SIGN LEADING SEPARATE .
01 count5 PIC S9(9 ) DISPLAY SIGN LEADING SEPARATE .
01 count6 PIC S9(9 ) DISPLAY SIGN LEADING SEPARATE .
01 count7 PIC S9(9 ) DISPLAY SIGN LEADING SEPARATE .
01 count8 PIC S9(9 ) DISPLAY SIGN LEADING SEPARATE .
01 count9 PIC S9(9 ) DISPLAY SIGN LEADING SEPARATE .
01 countx PIC S9(9 ) DISPLAY SIGN LEADING SEPARATE .
* EXEC SQL END DECLARE SECTION END-EXEC
01 uid PIC X(18 ).
01 uidx PIC X(18 ).
01 flag1 PIC S9(9 ) DISPLAY SIGN LEADING SEPARATE .
01 flag2 PIC S9(9 ) DISPLAY SIGN LEADING SEPARATE .
01 flag3 PIC S9(9 ) DISPLAY SIGN LEADING SEPARATE .
01 SQLCODE PIC S9(9 ) COMP .
01 errcnt PIC S9(4 ) DISPLAY SIGN LEADING SEPARATE .
01 i PIC S9(9 ) DISPLAY SIGN LEADING SEPARATE .
01 SQL-COD PIC S9(9 ) DISPLAY SIGN LEADING SEPARATE .
01 DISP1 PIC S9(4 ) DISPLAY SIGN LEADING SEPARATE .
01 DISP2 PIC S9(4 ) DISPLAY SIGN LEADING SEPARATE .
01 DISP4 PIC S9(4 ) DISPLAY SIGN LEADING SEPARATE .
01 DISP7 PIC S9(4 ) DISPLAY SIGN LEADING SEPARATE .
01 DISP8 PIC S9(4 ) DISPLAY SIGN LEADING SEPARATE .
* date_time declaration *
01 TO-DAY PIC 9 (6 ).
01 THE-TIME PIC 9 (8 ).
PROCEDURE DIVISION .
P0.
MOVE "HU" TO uid
CALL "AUTHID" USING uid
MOVE "not logged in, not" TO uidx
CALL "AUTHCK" USING SQLCODE uidx
MOVE SQLCODE TO SQL-COD
if (uid NOT = uidx) then
DISPLAY "ERROR: User " uid " expected."
DISPLAY "User " uidx " connected."
DISPLAY " "
STOP RUN
END-IF
MOVE 0 TO errcnt
DISPLAY
"SQL Test Suite, V6.0, Module COBOL, dml076.sco"
DISPLAY " "
DISPLAY
"59-byte ID"
DISPLAY "TEd Version #"
DISPLAY " "
* date_time print *
ACCEPT TO-DAY FROM DATE
ACCEPT THE-TIME FROM TIME
DISPLAY "Date run YYMMDD: " TO-DAY " at hhmmssff: " THE-TIME
********************** BEGIN TEST0410 *********************
*This program tests NULL values in OPEN CURSORS
*
DISPLAY " TEST0410 "
DISPLAY " NULL value in OPEN CURSOR "
DISPLAY " reference X3.135-1989 5.11 GR2 and 5.21 GR2
- " "
DISPLAY "
- " -------------------------------------------------"
MOVE "IRM" TO NME1
MOVE "XXX" TO VAR1
MOVE -1 TO indic1
MOVE 0 TO indic2
MOVE 10000 TO count1
MOVE 0 TO count3
* EXEC SQL DECLARE X CURSOR
* FOR SELECT PNUM
* FROM PROJ
* WHERE PNAME = :NME1:indic1 OR BUDGET > :count1:indic2
* END-EXEC
* EXEC SQL OPEN X;
CALL "SUB1" USING SQLCODE NME1 indic1 count1 indic2
MOVE SQLCODE TO SQL-COD
MOVE 1 TO i
PERFORM P50 UNTIL i > 6
MOVE "MXSS" TO NME1
MOVE "XXXXXX" TO CITY1
MOVE 50000 TO count1
MOVE 0 TO count2
MOVE -1 TO indic1
MOVE 0 TO indic2
* EXEC SQL DECLARE Y CURSOR
* FOR SELECT CITY
* FROM PROJ
* WHERE PNAME = :NME1:indic2 OR BUDGET < :count1:indic1
* END-EXEC
* EXEC SQL OPEN Y;
CALL "SUB2" USING SQLCODE NME1 indic2 count1 indic1
MOVE SQLCODE TO SQL-COD
MOVE 1 TO i
PERFORM P49 UNTIL i > 6
DISPLAY " The correct answers are:"
DISPLAY " count3 = 4 and count2 = 1 "
DISPLAY " "
DISPLAY " Your answers are:"
DISPLAY " count3 = " , count3 " and count2 = " , count2 " "
if ((count3 = 4 ) AND (count2 = 1 )) then
* EXEC SQL INSERT INTO TESTREPORT
* VALUES('0410','pass','MCO');
CALL "SUB3" USING SQLCODE
MOVE SQLCODE TO SQL-COD
DISPLAY " *** pass *** "
else
* EXEC SQL INSERT INTO TESTREPORT
* VALUES('0410','fail','MCO');
ADD 1 TO errcnt
CALL "SUB4" USING SQLCODE
MOVE SQLCODE TO SQL-COD
DISPLAY " dml076.sco *** fail *** "
END-IF
DISPLAY
"====================================================="
DISPLAY " "
* EXEC SQL COMMIT WORK;
CALL "SUB5" USING SQLCODE
MOVE SQLCODE TO SQL-COD
********************** END TEST0410 *********************
********************** BEGIN TEST0435 *********************
*This program tests UPDATES WHERE CURRENT
*
DISPLAY " TEST0435 "
DISPLAY " Host variables in UPDATE WHERE CURRENT"
DISPLAY " reference X3.135-1989 8.11, value expression"
DISPLAY "
- " --------------------------------------------------"
* EXEC SQL DECLARE DINO CURSOR
* FOR SELECT EMPNUM, CITY
* FROM STAFF
* WHERE CITY > 'Dino' END-EXEC
* EXEC SQL OPEN DINO;
CALL "SUB6" USING SQLCODE
MOVE SQLCODE TO SQL-COD
MOVE 0 TO GRDE
MOVE "XXXXX" TO CITY1
MOVE "XXX" TO NME1
MOVE "XXX" TO VAR1
MOVE 1 TO i
PERFORM P48 UNTIL i > 5
MOVE -1 TO GRDE
MOVE "Joan" TO NME1
* EXEC SQL SELECT SUM(GRADE) INTO :GRDE
* FROM STAFF
* WHERE CITY = :CITY1;
CALL "SUB7" USING SQLCODE GRDE CITY1
MOVE SQLCODE TO SQL-COD
* EXEC SQL SELECT EMPNAME INTO :NME1
* FROM STAFF
* WHERE EMPNAME > 'Ed';
CALL "SUB8" USING SQLCODE NME1
MOVE SQLCODE TO SQL-COD
* EXEC SQL ROLLBACK WORK;
CALL "SUB9" USING SQLCODE
MOVE SQLCODE TO SQL-COD
DISPLAY " "
DISPLAY " The correct answers are:"
DISPLAY " GRDE = 35 and NME1 = Smith"
DISPLAY " "
DISPLAY " Your answers are:"
DISPLAY " GRDE = " , GRDE " and NME1 = " , NME1
if ((GRDE = 35 ) AND (NME1 = "Smith
- " " )) then
* EXEC SQL INSERT INTO TESTREPORT
* VALUES('0435','pass','MCO');
CALL "SUB10" USING SQLCODE
MOVE SQLCODE TO SQL-COD
DISPLAY " *** pass *** "
else
* EXEC SQL INSERT INTO TESTREPORT
* VALUES('0435','fail','MCO');
ADD 1 TO errcnt
CALL "SUB11" USING SQLCODE
MOVE SQLCODE TO SQL-COD
DISPLAY " dml076.sco *** fail *** "
END-IF
DISPLAY
"====================================================="
DISPLAY " "
* EXEC SQL COMMIT WORK;
CALL "SUB12" USING SQLCODE
MOVE SQLCODE TO SQL-COD
********************** END TEST0435 *********************
********************** BEGIN TEST0436 *********************
*This program tests the NULL values for various
*SQL Data Types
DISPLAY " TEST0436 "
DISPLAY " NULL values for various SQL Data Types
- " "
DISPLAY " reference X3.135-1989 section 4.2, 8.10 GR 8
- " "
DISPLAY "
- " -------------------------------------------------"
MOVE "X" TO CHARTP
MOVE 0 TO indic1
MOVE 0 TO indic2
MOVE 0 TO indic3
MOVE 0 TO indic4
MOVE 0 TO indic5
MOVE 0 TO indic6
MOVE 0 TO indic7
MOVE 0 TO indic8
MOVE 0 TO count1
MOVE 0 TO count2
MOVE 0 TO count3
MOVE 99999 TO INTTP
MOVE 99 TO SMLTP
MOVE 999 TO NUMTP
MOVE 999 TO DECTP
* EXEC SQL INSERT INTO BB VALUES(NULL);
CALL "SUB13" USING SQLCODE
MOVE SQLCODE TO SQL-COD
* EXEC SQL INSERT INTO EE VALUES(NULL);
CALL "SUB14" USING SQLCODE
MOVE SQLCODE TO SQL-COD
* EXEC SQL INSERT INTO GG VALUES(NULL);
CALL "SUB15" USING SQLCODE
MOVE SQLCODE TO SQL-COD
* EXEC SQL INSERT INTO HH VALUES(NULL);
CALL "SUB16" USING SQLCODE
MOVE SQLCODE TO SQL-COD
* EXEC SQL INSERT INTO II VALUES(NULL);
CALL "SUB17" USING SQLCODE
MOVE SQLCODE TO SQL-COD
* EXEC SQL INSERT INTO JJ VALUES(NULL);
CALL "SUB18" USING SQLCODE
MOVE SQLCODE TO SQL-COD
* EXEC SQL INSERT INTO MM VALUES(NULL);
CALL "SUB19" USING SQLCODE
MOVE SQLCODE TO SQL-COD
* EXEC SQL INSERT INTO SS VALUES(NULL);
CALL "SUB20" USING SQLCODE
MOVE SQLCODE TO SQL-COD
* EXEC SQL SELECT CHARTEST INTO :CHARTP:indic1
* FROM BB;
CALL "SUB21" USING SQLCODE CHARTP indic1
MOVE SQLCODE TO SQL-COD
MOVE indic1 TO DISP1
* EXEC SQL SELECT INTTEST INTO :INTTP:indic2
* FROM EE;
CALL "SUB22" USING SQLCODE INTTP indic2
MOVE SQLCODE TO SQL-COD
MOVE indic2 TO DISP2
* EXEC SQL SELECT COUNT(*) INTO :count1
* FROM GG
* WHERE REALTEST IS NULL;
CALL "SUB24" USING SQLCODE count1
MOVE SQLCODE TO SQL-COD
* EXEC SQL SELECT SMALLTEST INTO :SMLTP:indic4
* FROM HH;
CALL "SUB25" USING SQLCODE SMLTP indic4
MOVE SQLCODE TO SQL-COD
MOVE indic4 TO DISP4
* EXEC SQL SELECT COUNT(*) INTO :count2
* FROM II
* WHERE DOUBLETEST IS NULL;
CALL "SUB27" USING SQLCODE count2
MOVE SQLCODE TO SQL-COD
* EXEC SQL SELECT COUNT(*) INTO :count3
* FROM JJ
* WHERE FLOATTEST IS NULL;
CALL "SUB29" USING SQLCODE count3
MOVE SQLCODE TO SQL-COD
* EXEC SQL SELECT NUMTEST INTO :NUMTP:indic7
* FROM MM;
CALL "SUB30" USING SQLCODE NUMTP indic7
MOVE SQLCODE TO SQL-COD
MOVE indic7 TO DISP7
* EXEC SQL SELECT NUMTEST INTO :DECTP:indic8
* FROM SS;
CALL "SUB31" USING SQLCODE DECTP indic8
MOVE SQLCODE TO SQL-COD
MOVE indic8 TO DISP8
* EXEC SQL ROLLBACK WORK;
CALL "SUB32" USING SQLCODE
MOVE SQLCODE TO SQL-COD
DISPLAY " The correct answers are:"
DISPLAY " All indicator variables should be -1"
DISPLAY " count1, count2, and count3 = 1"
DISPLAY " "
DISPLAY " Your answers are:"
DISPLAY " indic1 = " , DISP1 ", indic2 = " , DISP2
DISPLAY " indic4 = " , DISP4
DISPLAY " indic7 = " , DISP7 ", indic8 = " , DISP8
DISPLAY " count1 = " , count1 ", count2 = " , count2 ",
- " count3 = " , count3
MOVE 0 TO flag1
MOVE 0 TO flag2
if (indic1 NOT = -1 OR indic2 NOT = -1 OR
indic4 NOT = -1 ) then
MOVE 1 TO flag1
END-IF
if (indic7 NOT = -1 OR indic8 NOT = -1 ) then
MOVE 1 TO flag1
END-IF
if (count1 NOT = 1 OR count2 NOT = 1 OR count3 NOT
= 1 ) then
MOVE 1 TO flag2
END-IF
if (flag1 = 0 AND flag2 = 0 ) then
* EXEC SQL INSERT INTO TESTREPORT
* VALUES('0436','pass','MCO');
CALL "SUB33" USING SQLCODE
MOVE SQLCODE TO SQL-COD
DISPLAY " *** pass *** "
else
* EXEC SQL INSERT INTO TESTREPORT
* VALUES('0436','fail','MCO');
ADD 1 TO errcnt
CALL "SUB34" USING SQLCODE
MOVE SQLCODE TO SQL-COD
DISPLAY " dml076.sco *** fail *** "
END-IF
DISPLAY
"====================================================="
DISPLAY " "
* EXEC SQL COMMIT WORK;
CALL "SUB35" USING SQLCODE
MOVE SQLCODE TO SQL-COD
********************** END TEST0436 *********************
********************** BEGIN TEST0437 *******************
DISPLAY " TEST0437 "
DISPLAY " NULL values for various host variables
- " "
DISPLAY " reference X3.135-1989 section 4.2, 8.7, 5.6 GR
- " 1 or 2 "
DISPLAY "
- " -------------------------------------------------- "
MOVE -1 TO indic1
MOVE -1 TO indic2
MOVE -1 TO indic3
MOVE 0 TO indic4
MOVE 0 TO indic5
MOVE 0 TO indic6
MOVE 0 TO count1
MOVE 0 TO count2
MOVE 0 TO count3
MOVE 0 TO count4
MOVE "2" TO CHARTP
MOVE -23 TO DECTP
MOVE 99 TO REALTP-SUB
* EXEC SQL INSERT INTO BB VALUES(:CHARTP :indic1);
CALL "SUB36" USING SQLCODE CHARTP indic1
MOVE SQLCODE TO SQL-COD
* EXEC SQL INSERT INTO SS VALUES(:DECTP :indic2);
CALL "SUB37" USING SQLCODE DECTP indic2
MOVE SQLCODE TO SQL-COD
* EXEC SQL INSERT INTO GG VALUES(:REALTP-SUB :indic3);
CALL "SUB38" USING SQLCODE REALTP-SUB indic3
MOVE SQLCODE TO SQL-COD
MOVE "X" TO CHARTP
MOVE 23 TO DECTP
MOVE 45 TO REALTP-SUB
* EXEC SQL INSERT INTO BB VALUES(:CHARTP :indic4);
CALL "SUB39" USING SQLCODE CHARTP indic4
MOVE SQLCODE TO SQL-COD
* EXEC SQL INSERT INTO SS VALUES(:DECTP :indic5);
CALL "SUB40" USING SQLCODE DECTP indic5
MOVE SQLCODE TO SQL-COD
* EXEC SQL INSERT INTO GG VALUES(:REALTP-SUB :indic6);
CALL "SUB41" USING SQLCODE REALTP-SUB indic6
MOVE SQLCODE TO SQL-COD
* EXEC SQL INSERT INTO DD SELECT * FROM BB;
CALL "SUB42" USING SQLCODE
MOVE SQLCODE TO SQL-COD
* EXEC SQL INSERT INTO PP SELECT NUMTEST FROM SS;
CALL "SUB43" USING SQLCODE
MOVE SQLCODE TO SQL-COD
* EXEC SQL INSERT INTO JJ SELECT REALTEST FROM GG
* WHERE REALTEST IS NULL OR REALTEST > 0;
CALL "SUB44" USING SQLCODE
MOVE SQLCODE TO SQL-COD
* EXEC SQL SELECT CHARTEST INTO :CHARTP
* FROM DD
* WHERE CHARTEST IS NOT NULL;
CALL "SUB45" USING SQLCODE CHARTP
MOVE SQLCODE TO SQL-COD
* EXEC SQL SELECT NUMTEST INTO :DECTP
* FROM PP
* WHERE NUMTEST IS NOT NULL;
CALL "SUB46" USING SQLCODE DECTP
MOVE SQLCODE TO SQL-COD
* EXEC SQL SELECT COUNT(*) INTO :REALTP-SUB
* FROM JJ
* WHERE FLOATTEST BETWEEN 44 AND 46;
CALL "SUB47" USING SQLCODE REALTP-SUB
MOVE SQLCODE TO SQL-COD
* EXEC SQL SELECT COUNT(*) INTO :count1
* FROM JJ
* WHERE FLOATTEST IS NOT NULL;
CALL "SUB48" USING SQLCODE count1
MOVE SQLCODE TO SQL-COD
* EXEC SQL SELECT COUNT(*) INTO :count2
* FROM DD
* WHERE CHARTEST IS NULL;
CALL "SUB49" USING SQLCODE count2
MOVE SQLCODE TO SQL-COD
* EXEC SQL SELECT COUNT(*) INTO :count3
* FROM PP
* WHERE NUMTEST IS NULL;
CALL "SUB50" USING SQLCODE count3
MOVE SQLCODE TO SQL-COD
* EXEC SQL SELECT COUNT(*) INTO :count4
* FROM JJ
* WHERE FLOATTEST IS NULL;
CALL "SUB51" USING SQLCODE count4
MOVE SQLCODE TO SQL-COD
* EXEC SQL ROLLBACK WORK;
CALL "SUB52" USING SQLCODE
MOVE SQLCODE TO SQL-COD
DISPLAY " The correct answers are:"
DISPLAY " CHARTP = X, DECTP = 23, REALTP-SUB = 1"
DISPLAY " count1 = 1, count2 = 1"
DISPLAY " count3 = 1, count4 = 1"
DISPLAY " "
DISPLAY " Your answers are:"
DISPLAY " CHARTP = " , CHARTP ", DECTP = " , DECTP ",
- " REALTP-SUB = " , REALTP-SUB
DISPLAY " count1 = " , count1 ", count2 = " , count2
DISPLAY " count3 = " , count3 ", count4 = " , count4
MOVE 0 TO flag1
if ((CHARTP NOT = "X" ) OR DECTP NOT = 23 ) then
MOVE 1 TO flag1
END-IF
MOVE 0 TO flag2
if (REALTP-SUB NOT = 1 ) then
MOVE 1 TO flag2
END-IF
MOVE 0 TO flag3
if (count1 NOT = 1 OR count2 NOT = 1 OR count3 NOT
= 1 OR count4 NOT = 1 ) then
MOVE 1 TO flag3
END-IF
if (flag1 = 0 AND flag2 = 0 AND flag3 = 0 ) then
* EXEC SQL INSERT INTO TESTREPORT
* VALUES('0437','pass','MCO');
CALL "SUB53" USING SQLCODE
MOVE SQLCODE TO SQL-COD
DISPLAY " *** pass *** "
else
* EXEC SQL INSERT INTO TESTREPORT
* VALUES('0437','fail','MCO');
ADD 1 TO errcnt
CALL "SUB54" USING SQLCODE
MOVE SQLCODE TO SQL-COD
DISPLAY " dml076.sco *** fail *** "
END-IF
DISPLAY
"====================================================="
* EXEC SQL COMMIT WORK;
CALL "SUB5" USING SQLCODE
DISPLAY " "
********************** END TEST0437 *********************
********************** BEGIN TEST0441 *******************
DISPLAY " TEST0441 "
DISPLAY " NULL values for various predicates"
DISPLAY " reference 5.6 <value specification> GR 1 or 2"
DISPLAY
"----------------------------------------------------"
MOVE 0 TO count1
MOVE -1 TO count2
MOVE 0 TO count3
MOVE -1 TO count4
MOVE 0 TO count5
MOVE -1 TO count6
MOVE 0 TO count7
MOVE -1 TO count8
MOVE 0 TO count9
MOVE -1 TO countx
MOVE 0 TO indic1
MOVE -1 TO indic2
MOVE 0 TO indic3
MOVE -1 TO indic4
MOVE 0 TO indic5
MOVE -1 TO indic6
MOVE 0 TO indic7
MOVE -1 TO indic8
MOVE 0 TO indic9
MOVE -1 TO indicx
MOVE 11 TO DECTP
MOVE "V___na%" TO CITY1
MOVE "S_P%" TO NME1
* EXEC SQL SELECT COUNT(*) INTO :count1
* FROM STAFF
* WHERE GRADE BETWEEN 9 AND :DECTP :indic1;
CALL "SUB55" USING SQLCODE count1 DECTP indic1
MOVE SQLCODE TO SQL-COD
* EXEC SQL SELECT COUNT(*) INTO :count2
* FROM STAFF
* WHERE GRADE BETWEEN 9 AND :DECTP :indic2;
CALL "SUB56" USING SQLCODE count2 DECTP indic2
MOVE SQLCODE TO SQL-COD
MOVE 39999 TO DECTP
* EXEC SQL SELECT COUNT(*) INTO :count3
* FROM PROJ
* WHERE BUDGET NOT BETWEEN 9999 AND :DECTP :indic3;
CALL "SUB57" USING SQLCODE count3 DECTP indic3
MOVE SQLCODE TO SQL-COD
* EXEC SQL SELECT COUNT(*) INTO :count4
* FROM PROJ
* WHERE BUDGET NOT BETWEEN 999 AND :DECTP :indic4;
CALL "SUB58" USING SQLCODE count4 DECTP indic4
MOVE SQLCODE TO SQL-COD
* EXEC SQL SELECT COUNT(*) INTO :count5
* FROM PROJ
* WHERE PNAME LIKE :NME1 :indic5;
CALL "SUB59" USING SQLCODE count5 NME1 indic5
MOVE SQLCODE TO SQL-COD
* EXEC SQL SELECT COUNT(*) INTO :count6
* FROM PROJ
* WHERE PNAME LIKE :NME1 :indic6;
CALL "SUB60" USING SQLCODE count6 NME1 indic6
MOVE SQLCODE TO SQL-COD
* EXEC SQL SELECT COUNT(*) INTO :count7
* FROM STAFF
* WHERE CITY NOT LIKE :CITY1 :indic7;
CALL "SUB61" USING SQLCODE count7 CITY1 indic7
MOVE SQLCODE TO SQL-COD
* EXEC SQL SELECT COUNT(*) INTO :count8
* FROM STAFF
* WHERE CITY NOT LIKE :CITY1 :indic8;
CALL "SUB62" USING SQLCODE count8 CITY1 indic8
MOVE SQLCODE TO SQL-COD
MOVE 20 TO DECTP
* EXEC SQL SELECT COUNT(*) INTO :count9
* FROM WORKS
* WHERE HOURS <> :DECTP :indic9;
CALL "SUB63" USING SQLCODE count9 DECTP indic9
MOVE SQLCODE TO SQL-COD
* EXEC SQL SELECT COUNT(*) INTO :countx
* FROM WORKS
* WHERE HOURS <> :DECTP :indicx;
CALL "SUB64" USING SQLCODE countx DECTP indicx
MOVE SQLCODE TO SQL-COD
* EXEC SQL ROLLBACK WORK;
CALL "SUB65" USING SQLCODE
MOVE SQLCODE TO SQL-COD
DISPLAY " The correct answers are:"
DISPLAY " count1 = 1, count2 = 0"
DISPLAY " count3 = 1, count4 = 0"
DISPLAY " count5 = 2, count6 = 0"
DISPLAY " count7 = 3, count8 = 0"
DISPLAY " count9 = 8, countx = 0"
DISPLAY " "
DISPLAY " Your answers are:"
DISPLAY " count1 = " , count1 ", count2 = " , count2
DISPLAY " count3 = " , count3 ", count4 = " , count4
DISPLAY " count5 = " , count5 ", count6 = " , count6
DISPLAY " count7 = " , count7 ", count8 = " , count8
DISPLAY " count9 = " , count9 ", countx = " , countx
MOVE 0 TO flag1
MOVE 0 TO flag2
MOVE 0 TO flag3
if ((count1 NOT = 1 ) OR (count2 NOT = 0 ) OR (count3
NOT = 1 ) OR (count4 NOT = 0 )) then
MOVE 1 TO flag1
END-IF
if ((count5 NOT = 2 ) OR (count6 NOT = 0 ) OR (count7
NOT = 3 ) OR (count8 NOT = 0 )) then
MOVE 1 TO flag2
END-IF
if ((count9 NOT = 8 ) OR (countx NOT = 0 )) then
MOVE 1 TO flag3
END-IF
if ((flag1 = 0 ) AND (flag2 = 0 ) AND (flag3 = 0 ))
then
* EXEC SQL INSERT INTO TESTREPORT
* VALUES('0441','pass','MCO');
CALL "SUB66" USING SQLCODE
MOVE SQLCODE TO SQL-COD
DISPLAY " *** pass *** "
else
* EXEC SQL INSERT INTO TESTREPORT
* VALUES('0441','fail','MCO');
ADD 1 TO errcnt
CALL "SUB67" USING SQLCODE
MOVE SQLCODE TO SQL-COD
DISPLAY " dml076.sco *** fail *** "
END-IF
DISPLAY
"====================================================="
DISPLAY " "
* EXEC SQL COMMIT WORK;
CALL "SUB68" USING SQLCODE
MOVE SQLCODE TO SQL-COD
********************** END TEST0441 *********************
**** TESTER MAY CHOOSE TO INSERT CODE FOR errcnt > 0
STOP RUN .
* **** Procedures for PERFORM statements
P50.
* EXEC SQL FETCH X INTO :VAR1;
CALL "SUB69" USING SQLCODE VAR1
MOVE SQLCODE TO SQL-COD
if (SQLCODE = 0 ) then
COMPUTE count3 = count3 + 1
END-IF
DISPLAY "VAR1 = " , VAR1
ADD 1 TO i
.
P49.
* EXEC SQL FETCH Y INTO :CITY1;
CALL "SUB70" USING SQLCODE CITY1
MOVE SQLCODE TO SQL-COD
if (SQLCODE = 0 ) then
COMPUTE count2 = count2 + 1
END-IF
DISPLAY "CITY1 = " , CITY1
ADD 1 TO i
.
P48.
MOVE i TO GRDE
* EXEC SQL FETCH DINO INTO :VAR1, :CITY1;
CALL "SUB71" USING SQLCODE VAR1 CITY1
MOVE SQLCODE TO SQL-COD
if (SQLCODE = 0 ) then
DISPLAY " VAR1 = " , VAR1 ", CITY1 = " , CITY1
MOVE "Dinoville" TO CITY1
* EXEC SQL UPDATE STAFF
* SET GRADE = :GRDE + 10, CITY = :CITY1
* WHERE CURRENT OF DINO;
CALL "SUB72" USING SQLCODE GRDE CITY1
MOVE SQLCODE TO SQL-COD
END-IF
if (i = 2 ) then
MOVE "Smith" TO NME1
* EXEC SQL UPDATE STAFF
* SET GRADE = GRADE * :GRDE, EMPNAME = :NME1
* WHERE CURRENT OF DINO;
CALL "SUB73" USING SQLCODE GRDE NME1
MOVE SQLCODE TO SQL-COD
DISPLAY " VAR1 = " , VAR1 ", GRDE = " , GRDE
END-IF
ADD 1 TO i
.
Messung V0.5 in Prozent C=77 H=100 G=89
¤ Dauer der Verarbeitung: 0.12 Sekunden
(vorverarbeitet am 2026-06-09)
¤
*© Formatika GbR, Deutschland