products/Sources/formale Sprachen/Cobol/Test-Suite/SQL M image not shown  

Quellcode-Bibliothek

© Kompilation durch diese Firma

[Weder Korrektheit noch Funktionsfähigkeit der Software werden zugesichert.]

Datei: dml054.mco   Sprache: Cobol

       IDENTIFICATION DIVISION.
       PROGRAM-ID.  DML079.
       ENVIRONMENT DIVISION.
       CONFIGURATION SECTION.
       SOURCE-COMPUTER.  xyz.
       OBJECT-COMPUTER.  xyz.
       DATA DIVISION.
       WORKING-STORAGE SECTION.


      * Standard COBOL (file "DML079.SCO") calling SQL
      * procedures in file "DML079.MCO".
      * STANDARD COBOL (file "DML079.SCO")  

      ****************************************************************
      *                                                              
      *                 COMMENT SECTION                              
      *                                                              
      * DATE 1991/10/10 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.
      *                                                              
      * DML079.SCO                                                    
      * WRITTEN BY: SHIRLEY HURWITZ                                       
      *                                                              
      * THIS ROUTINE TESTS MISCELLANEOUS FEATURES.                   
      *                                                              
      * REFERENCES                                                   
      *       AMERICAN NATIONAL STANDARD database language - SQL     
      *                         X3.135-1989                          
      *                         X3.168-1989                          
      *                                                              
      ****************************************************************



      * EXEC SQL BEGIN DECLARE SECTION END-EXEC
       01  EMPNM1 PIC  X(20).
       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  uid PIC  X(18).
       01  uidx PIC  X(18).
      *  EXEC SQL END DECLARE SECTION END-EXEC

       01  SQLCODE PIC S9(9) COMP.
       01  errcnt PIC S9(9) DISPLAY SIGN LEADING SEPARATE.

      *date_time declaration 
       01  TO-DAY PIC 9(6).
       01  THE-TIME PIC 9(8).

       01  flag1 PIC S9(9) DISPLAY SIGN LEADING SEPARATE.
       01  flag2 PIC S9(9) DISPLAY SIGN LEADING SEPARATE.
       01  i PIC S9(9) DISPLAY SIGN LEADING SEPARATE.
       01  ii PIC S9(9) DISPLAY SIGN LEADING SEPARATE.
       01  j PIC S9(9) DISPLAY SIGN LEADING SEPARATE.
       01  jj PIC S9(9) DISPLAY SIGN LEADING SEPARATE.

       01  SQL-COD PIC S9(9) DISPLAY SIGN LEADING SEPARATE.

       PROCEDURE DIVISION.
       P0.



             MOVE "HU" TO uid
             CALL "AUTHID" USING uid
             MOVE "not logged in, not" TO uidx
      *  EXEC SQL SELECT USER INTO :uidx FROM HU.ECCO;
             CALL "SUB1" USING SQLCODE uidx
             MOVE SQLCODE TO SQL-COD
             if (uid  NOT  =   uidx) then
               DISPLAY "ERROR: User ", uid " expected. User ", uidx "
      -    " connected"
             END-IF
             MOVE 0 TO errcnt
           DISPLAY "SQL Test Suite, V6.0, Module COBOL, dml079.sco"
             DISPLAY 
           "59-byte ID"
           DISPLAY "TEd Version #"

      *date_time print 
           ACCEPT TO-DAY FROM DATE
           ACCEPT THE-TIME FROM TIME
           DISPLAY "Date run YYMMDD: " TO-DAY " at hhmmssff: " THE-TIME

      ******************** BEGIN TEST0451 *******************

             DISPLAY "=============================================="
             DISPLAY " TEST0451 "
             DISPLAY " UNIQUEness is case sensitive "
             DISPLAY "X3.135-1989 Sec. 4.2.1 Character strings "
             DISPLAY "X3.135-1989 Sec. 5.1 Format "
             DISPLAY " - - - - - - - - - - - - - - - - - - -"

             MOVE 0 TO i

      *  EXEC SQL UPDATE STAFF SET EMPNUM = 'e2'
      *    WHERE EMPNUM = 'E4';
             CALL "SUB2" USING SQLCODE
             MOVE SQLCODE TO SQL-COD
             if (SQLCODE  =  0) then
               ADD 1 TO i
             END-IF
               DISPLAY " 1. SQLCODE = 0 is a pass. SQLCODE = ", SQL-COD

      *  EXEC SQL INSERT INTO STAFF(EMPNUM)
      *    VALUES ('E1');
             CALL "SUB3" USING SQLCODE
             MOVE SQLCODE TO SQL-COD
             if (SQLCODE  <  0) then
               ADD 1 TO i
             END-IF
               DISPLAY " 2. SQLCODE less than 0 is a pass. SQLCODE = ",
               SQL-COD

      *  EXEC SQL INSERT INTO STAFF(EMPNUM)
      *    VALUES ('e1');
             CALL "SUB4" USING SQLCODE
             MOVE SQLCODE TO SQL-COD
             if (SQLCODE  =  0) then
               ADD 1 TO i
             END-IF
               DISPLAY " 3. SQLCODE = 0 is a pass. SQLCODE = ", SQL-COD
  
      *  EXEC SQL UPDATE STAFF
      *    SET EMPNUM = 'E1' WHERE EMPNUM = 'e1';
             CALL "SUB5" USING SQLCODE
             MOVE SQLCODE TO SQL-COD
             if (SQLCODE  <  0) then
               ADD 1 TO i
             END-IF
               DISPLAY " 4. SQLCODE less than 0 is a pass. SQLCODE = ",
               SQL-COD

      *  EXEC SQL INSERT INTO WORKS (EMPNUM,PNUM)
      *    VALUES ('e1','p2');
             CALL "SUB6" USING SQLCODE
             MOVE SQLCODE TO SQL-COD
             if (SQLCODE  =  0) then
               ADD 1 TO i
             END-IF
               DISPLAY " 5. SQLCODE = 0 is a pass. SQLCODE = ", SQL-COD

      *  EXEC SQL INSERT INTO WORKS (EMPNUM,PNUM)
      *    VALUES ('E1','p2');
             CALL "SUB7" USING SQLCODE
             MOVE SQLCODE TO SQL-COD
             if (SQLCODE  =  0) then
               ADD 1 TO i
             END-IF
               DISPLAY " 6. SQLCODE = 0 is a pass. SQLCODE = ", SQL-COD

      *  EXEC SQL INSERT INTO WORKS (EMPNUM,PNUM) 
      *    VALUES ('E1','P2');
             CALL "SUB8" USING SQLCODE
             MOVE SQLCODE TO SQL-COD
             if (SQLCODE  <  0) then
               ADD 1 TO i
             END-IF
               DISPLAY " 7. SQLCODE less than 0 is a pass. SQLCODE = ",
               SQL-COD

      *  EXEC SQL INSERT INTO WORKS (EMPNUM,PNUM)
      *    VALUES ('e1', 'P2');
             CALL "SUB9" USING SQLCODE
             MOVE SQLCODE TO SQL-COD
             if (SQLCODE  =  0) then
               ADD 1 TO i
               END-IF
               DISPLAY " 8. SQLCODE = 0 is a pass. SQLCODE = ", SQL-COD

      *  EXEC SQL UPDATE WORKS
      *    SET EMPNUM = 'E1'
      *    WHERE PNUM = 'P5' AND EMPNUM = 'E4';
             CALL "SUB10" USING SQLCODE
             MOVE SQLCODE TO SQL-COD
             if (SQLCODE  <  0) then
               ADD 1 TO i
             END-IF
               DISPLAY " 9. SQLCODE less than 0 is a pass. SQLCODE = ",
               SQL-COD

      *  EXEC SQL UPDATE WORKS
      *    SET EMPNUM = 'e1'
      *    WHERE PNUM = 'P5' AND EMPNUM = 'E4';
             CALL "SUB11" USING SQLCODE
             MOVE SQLCODE TO SQL-COD
             if (SQLCODE  =  0) then
               ADD 1 TO i
             END-IF
               DISPLAY " 10. SQLCODE = 0 is a pass. SQLCODE = ",
               SQL-COD

      *  EXEC SQL UPDATE WORKS
      *    SET PNUM = 'P4'
      *    WHERE PNUM = 'P2' AND EMPNUM = 'E4';
             CALL "SUB12" USING SQLCODE
             MOVE SQLCODE TO SQL-COD
             if (SQLCODE  <  0) then
               ADD 1 TO i
             END-IF
               DISPLAY " 11. SQLCODE less than 0 is a pass. SQLCODE =
      -    " ", SQL-COD

      *  EXEC SQL UPDATE WORKS
      *    SET PNUM = 'p4'
      *    WHERE PNUM = 'P2' AND EMPNUM = 'E4';
             CALL "SUB13" USING SQLCODE
             MOVE SQLCODE TO SQL-COD
             if (SQLCODE  =  0) then
               ADD 1 TO i
             END-IF
               DISPLAY " 12. SQLCODE = 0 is a pass. SQLCODE = ",
               SQL-COD

      *  EXEC SQL ROLLBACK WORK;
             CALL "SUB14" USING SQLCODE
             MOVE SQLCODE TO SQL-COD

             DISPLAY " The correct answer is i = 12"
             DISPLAY " Your answer is i = ", i

             if (i  =  12) then
               DISPLAY " *** pass ***"
      *    EXEC SQL INSERT INTO TESTREPORT
      *      VALUES('0451','pass','MCO');
               CALL "SUB15" USING SQLCODE
               MOVE SQLCODE TO SQL-COD
             else
               DISPLAY " dml079.sco *** fail ***"
      *    EXEC SQL INSERT INTO TESTREPORT
      *      VALUES('0451','fail','MCO');
               CALL "SUB16" USING SQLCODE
               MOVE SQLCODE TO SQL-COD
               COMPUTE errcnt = errcnt + 1
             END-IF

             DISPLAY  " "
      *  EXEC SQL COMMIT WORK;
             CALL "SUB17" USING SQLCODE
             MOVE SQLCODE TO SQL-COD
             DISPLAY
             "====================================================="

      ******************** END TEST0451 *******************

      ******************** BEGIN TEST0452 *******************

             MOVE  0 TO i
             MOVE  0 TO j

             DISPLAY " TEST0452 "
             DISPLAY " Order of precedence, Left to Right, in UNION
      -    " (ALL) "
             DISPLAY "X3.135-1989 sec. 8.3 GR 2) b) and
      -    " "
             DISPLAY " - - - - - - - - - - - - - - - - - - -"

             DISPLAY " *** FOR (SELECT EMPNAME FROM STAFF )"
             DISPLAY " *** UNION "
             DISPLAY " *** SELECT EMPNAME FROM STAFF "
             DISPLAY " *** UNION ALL "
             DISPLAY " *** SELECT EMPNAME FROM STAFF"

             DISPLAY " *** FOR (SELECT EMPNAME FROM STAFF )"
             DISPLAY " *** UNION ALL "
             DISPLAY " *** SELECT EMPNAME FROM STAFF "
             DISPLAY " *** UNION "
             DISPLAY " *** SELECT EMPNAME FROM STAFF"

      *  EXEC SQL DECLARE X1 CURSOR
      *    FOR SELECT EMPNAME FROM STAFF
      *    UNION
      *    SELECT EMPNAME FROM STAFF
      *    UNION ALL 
      *    SELECT EMPNAME FROM STAFF END-EXEC

      *  EXEC SQL DECLARE X2 CURSOR
      *    FOR SELECT EMPNAME FROM STAFF
      *    UNION ALL
      *    SELECT EMPNAME FROM STAFF
      *    UNION
      *    SELECT EMPNAME FROM STAFF END-EXEC

      *  EXEC SQL OPEN X1;
             CALL "SUB18" USING SQLCODE
             MOVE SQLCODE TO SQL-COD

             MOVE 1 TO ii
             PERFORM P50 UNTIL ii > 15

      *  EXEC SQL CLOSE X1;
             CALL "SUB19" USING SQLCODE
             MOVE SQLCODE TO SQL-COD

      *  EXEC SQL OPEN X2;
             CALL "SUB20" USING SQLCODE
             MOVE SQLCODE TO SQL-COD

             MOVE 1 TO jj
             PERFORM P49 UNTIL jj > 15

      *  EXEC SQL CLOSE X2;
             CALL "SUB21" USING SQLCODE
             MOVE SQLCODE TO SQL-COD

             DISPLAY "The correct answer is i=10 and j=5 "
             DISPLAY "Your answer is i=", i " j=", j " "
             if ((i  =  10)  AND  (j  =  5)) then
               DISPLAY " *** pass ***"
      *    EXEC SQL INSERT INTO TESTREPORT
      *      VALUES('0452','pass','MCO');
               CALL "SUB22" USING SQLCODE
               MOVE SQLCODE TO SQL-COD
             else
               DISPLAY " dml079.sco *** fail ***"
      *    EXEC SQL INSERT INTO TESTREPORT
      *      VALUES('0452','fail','MCO');
               CALL "SUB23" USING SQLCODE
               MOVE SQLCODE TO SQL-COD
               COMPUTE errcnt = errcnt + 1
             END-IF

             DISPLAY  " "
      *  EXEC SQL COMMIT WORK;
             CALL "SUB24" USING SQLCODE
             MOVE SQLCODE TO SQL-COD
             DISPLAY
             "====================================================="

      ******************** END TEST0452 *******************

      ******************** BEGIN TEST0453 *******************

             DISPLAY " TEST0453 "
             DISPLAY " NULL with empty subquery in ALL, SOME, ANY"
             DISPLAY " ref. X3.135-1989 5.16, GR 2a and 2d empty
      -    " subquery "
             DISPLAY
             "--------------------------------------------------------"

             COMPUTE count1 = -7
             COMPUTE count2 = -7
             COMPUTE count3 = -7
             COMPUTE count4 = -7
             COMPUTE count5 = -7
             COMPUTE count6 = -7
             MOVE 0 TO flag1
             MOVE 0 TO flag2

      *  EXEC SQL UPDATE PROJ
      *    SET CITY = NULL WHERE PNAME = 'IRM';
             CALL "SUB25" USING SQLCODE
             MOVE SQLCODE TO SQL-COD

      *  EXEC SQL SELECT COUNT(*) INTO :count1 
      *    FROM PROJ
      *    WHERE CITY IS NULL;
             CALL "SUB26" USING SQLCODE count1
             MOVE SQLCODE TO SQL-COD
             if (count1  NOT =  1) then
               MOVE 1 TO flag1
               DISPLAY "Failed to set city to NULL for IRM "
             END-IF

      *  EXEC SQL SELECT COUNT(*) INTO :count1
      *    FROM PROJ
      *    WHERE CITY = ALL (SELECT CITY
      *    FROM STAFF
      *    WHERE EMPNUM = 'E8');
             CALL "SUB27" USING SQLCODE count1
             MOVE SQLCODE TO SQL-COD

      *  EXEC SQL SELECT COUNT(*) INTO :count2
      *    FROM PROJ
      *    WHERE CITY <> ALL (SELECT CITY
      *    FROM STAFF
      *    WHERE EMPNUM = 'E8');
             CALL "SUB28" USING SQLCODE count2
             MOVE SQLCODE TO SQL-COD

      *  EXEC SQL SELECT COUNT(*) INTO :count3
      *    FROM PROJ
      *    WHERE CITY = ANY (SELECT CITY
      *    FROM STAFF
      *    WHERE EMPNUM = 'E8');
             CALL "SUB29" USING SQLCODE count3
             MOVE SQLCODE TO SQL-COD

      *  EXEC SQL SELECT COUNT(*) INTO :count4
      *    FROM PROJ
      *    WHERE CITY <> ANY (SELECT CITY
      *    FROM STAFF
      *    WHERE EMPNUM = 'E8');
             CALL "SUB30" USING SQLCODE count4
             MOVE SQLCODE TO SQL-COD

      *  EXEC SQL SELECT COUNT(*) INTO :count5
      *    FROM PROJ
      *    WHERE CITY = SOME (SELECT CITY
      *    FROM STAFF
      *    WHERE EMPNUM = 'E8');
             CALL "SUB31" USING SQLCODE count5
             MOVE SQLCODE TO SQL-COD

      *  EXEC SQL SELECT COUNT(*) INTO :count6
      *    FROM PROJ
      *    WHERE CITY <> SOME (SELECT CITY
      *    FROM STAFF
      *    WHERE EMPNUM = 'E8');
             CALL "SUB32" USING SQLCODE count6
             MOVE SQLCODE TO SQL-COD

      *  EXEC SQL ROLLBACK WORK;
             CALL "SUB33" USING SQLCODE
             MOVE SQLCODE TO SQL-COD


             DISPLAY " The correct answers are:"
             DISPLAY " count1 = 6, count2 = 6, count3 = 0"
             DISPLAY " count4 = 0, count5 = 0, count6 = 0"
             DISPLAY  " "
             DISPLAY " Your answers are:"
             DISPLAY " count1 = ", count1 ", count2 = ", count2 ",
      -    " count3 = ", count3
             DISPLAY " count4 = ", count4 ", count5 = ", count5 ",
      -    " count6 = ", count6

             if ((count1  NOT =  6)  OR  (count2  NOT =  6)  OR  (count3
              NOT =  0)) then
               MOVE 1 TO flag1
             END-IF

             if ((count4  NOT =  0)  OR  (count5  NOT =  0)  OR  (count6
              NOT =  0)) then
               MOVE 1 TO flag2
             END-IF

             if ((flag1  =  0)  AND  (flag2  =  0)) then
               DISPLAY " *** pass *** "
      *    EXEC SQL INSERT INTO TESTREPORT
      *      VALUES('0453','pass','MCO');
               CALL "SUB34" USING SQLCODE
               MOVE SQLCODE TO SQL-COD
             else
               DISPLAY " dml079.sco *** fail *** "
      *    EXEC SQL INSERT INTO TESTREPORT
      *      VALUES('0453','fail','MCO');
               CALL "SUB35" USING SQLCODE
               MOVE SQLCODE TO SQL-COD
               COMPUTE errcnt = errcnt + 1
             END-IF
             DISPLAY  " "
      *  EXEC SQL COMMIT WORK;
             CALL "SUB36" USING SQLCODE
             MOVE SQLCODE TO SQL-COD
             DISPLAY
             "=================================================="

      ******************** END TEST0453 *******************

      **** TESTER MAY CHOOSE TO INSERT CODE FOR errcnt > 0

           STOP RUN.

      *    ****  Procedures for PERFORM statements

        P50.
      *    EXEC SQL FETCH X1 INTO :EMPNM1;
               CALL "SUB37" USING SQLCODE EMPNM1
               MOVE SQLCODE TO SQL-COD
               if (SQLCODE  =  0) then
                 MOVE  ii TO i
               END-IF
             ADD 1 TO ii
           .

        P49.
      *    EXEC SQL FETCH X2 INTO :EMPNM1;
               CALL "SUB38" USING SQLCODE EMPNM1
               MOVE SQLCODE TO SQL-COD
               if (SQLCODE  =  0) then
                 MOVE  jj TO j
               END-IF
             ADD 1 TO jj
           .

¤ Dauer der Verarbeitung: 0.31 Sekunden  (vorverarbeitet)  ¤





Download des
Quellennavigators
Download des
sprechenden Kalenders

in der Quellcodebibliothek suchen




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.


Bot Zugriff