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 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
.
¤ Dauer der Verarbeitung: 0.33 Sekunden
(vorverarbeitet)
¤
|
Haftungshinweis
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung ist noch experimentell.
|