Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/Cobol/Test-Suite/SQL P/cdr/   (NIST Cobol Test-Suite ©)  Datei vom 4.1.2008 mit Größe 14 kB image not shown  

Quelle  cdr007.cob

  Sprache: Cobol
 

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


      * EMBEDDED COBOL (file "CDR007.PCO")  

      ****************************************************************
      *                                                              
      *                 COMMENT SECTION                              
      *                                                              
      * DATE 1989/04/07 EMBEDDED 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.
      *                                                              
      * CDR007.PCO                                                    
      * WRITTEN BY: SUN DAJUN                                        
      * TRANSLATED AUTOMATICALLY FROM EMBEDDED C BY CHRIS SCHANZLE
      *                                                              
      *   THIS ROUTINE TESTS THE <CHECK> CONSTRAINT.                 
      *                                                              
      * REFERENCES                                                   
      *       AMERICAN NATIONAL STANDARD database language - SQL     
      *                          with Integrity Enhancement          
      *                                                              
      *            SECTION 6.8                                       
      *               <check constraint definition>::=               
      *                     CHECK (<search condition>)               
      ****************************************************************





           EXEC SQL BEGIN DECLARE SECTION END-EXEC
       01  count1 PIC S9(9DISPLAY SIGN LEADING SEPARATE.
       01  count2 PIC S9(9DISPLAY SIGN LEADING SEPARATE.
       01  uid PIC X(18).
       01  uidx PIC X(18).
           EXEC SQL END DECLARE SECTION END-EXEC
       01  SQLCODE PIC S9(9COMP.
       01  errcnt PIC S9(4DISPLAY SIGN LEADING SEPARATE.


       01  code1 PIC S9(9DISPLAY SIGN LEADING SEPARATE.
       01  code2 PIC S9(9DISPLAY SIGN LEADING SEPARATE.

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

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


           MOVE "SUN" TO uid
           CALL "AUTHID" USING uid
           MOVE "not logged in, not" TO uidx
           EXEC SQL SELECT 
                 USER INTO :uidx FROM SUN.ECCO END-EXEC
           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, Embedded COBOL, cdr007.pco"
           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 TEST0319 *******************
      *This procedure tests IN element in CHECK specification
      *Syntax Rules 6.3.8                                    
      *     CHECK condition                                  
      *             GRADE NOT IN (5,22)   on STAFF10         

           DISPLAY "                     TEST0319             "
           DISPLAY "                  CHECK CONSTRAINTS    "
           DISPLAY "  SQL with Integrity Enhancement section 6.8"
           DISPLAY "  - - - - - - - - - - - - - - - - - - - - - - - - "
           DISPLAY  " "
           DISPLAY "        INSERT INTO STAFF10"
           DISPLAY "        VALUES('E3','Susan',11,'Hawaii');"
           DISPLAY  " "
           DISPLAY "        UPDATE STAFF10"
           DISPLAY "        SET GRADE = 5"
           DISPLAY "        WHERE EMPNUM = 'E3';"
           DISPLAY  " "
           DISPLAY "        SELECT COUNT(*) INTO :count1"
           DISPLAY "        FROM STAFF10"
           DISPLAY "        WHERE GRADE = 11;"
           EXEC SQL DELETE FROM STAFF10 END-EXEC
           MOVE SQLCODE TO SQL-COD
           EXEC SQL INSERT INTO STAFF10
             VALUES('E3','Susan',11,'Hawaii'END-EXEC
           MOVE SQLCODE TO SQL-COD
           EXEC SQL UPDATE STAFF10
             SET GRADE = 5
             WHERE EMPNUM = 'E3' END-EXEC
           MOVE SQLCODE TO SQL-COD
           MOVE SQLCODE TO code1
           EXEC SQL SELECT COUNT(*) INTO :count1
             FROM STAFF10
             WHERE GRADE = 11 END-EXEC
           MOVE SQLCODE TO SQL-COD
           DISPLAY " The correct answer is:"
           DISPLAY "         code1 < 0,count = 1."
           DISPLAY " Your answer is:"
           DISPLAY "         code1 = ", code1
           DISPLAY ",count1= ", count1
           if (code1  <  0  AND  count1  =  1 ) then
             EXEC SQL INSERT INTO TESTREPORT
               VALUES('0319','pass','PCO'END-EXEC
             MOVE SQLCODE TO SQL-COD
             DISPLAY "                 *** pass ***     "
           else
             EXEC SQL INSERT INTO TESTREPORT
               VALUES('0319','fail','PCO'END-EXEC
             ADD 1 TO errcnt
             MOVE SQLCODE TO SQL-COD
             DISPLAY "       cdr007.pco  *** fail ***     "
           END-IF
           DISPLAY "================================================"

           DISPLAY  " "
           EXEC SQL COMMIT WORK END-EXEC
           MOVE SQLCODE TO SQL-COD
      ****************** END TEST0319 *****************************







      ******************** BEGIN TEST0320 ******************
      *This procedure tests CHECK specification on two     
      *columns with AND.                                   
      *     CHECK condition                                
      *          GRADE NOT IN (5,22) AND EMPNAME LIKE 'T%' 

           DISPLAY "                     TEST0320             "
           DISPLAY "                  CHECK CONSTRAINTS    "
           DISPLAY "  SQL with Integrity Enhancement section 6.8"
           DISPLAY "  - - - - - - - - - - - - - - - - - - - - - - - - "
           DISPLAY  " "
           DISPLAY "        INSERT INTO STAFF11"
           DISPLAY "        VALUES('E3','Susan',11,'Hawaii');"
           DISPLAY  " "
           DISPLAY "        UPDATE STAFF11"
           DISPLAY "        SET GRADE = 5"
           DISPLAY "        WHERE EMPNUM = 'E3';"
           DISPLAY  " "
           DISPLAY "        UPDATE STAFF11"
           DISPLAY "        SET EMPNAME = 'Tom'"
           DISPLAY "        WHERE EMPNUM = 'E3';"
           DISPLAY  " "
           DISPLAY "        SELECT COUNT(*) INTO :count1"
           DISPLAY "        FROM STAFF11"
           DISPLAY "        WHERE EMPNAME = 'Susan' AND GRADE = 11;"
           EXEC SQL DELETE FROM STAFF11 END-EXEC
           MOVE SQLCODE TO SQL-COD
           EXEC SQL INSERT INTO STAFF11
             VALUES('E3','Susan',11,'Hawaii'END-EXEC
           MOVE SQLCODE TO SQL-COD
           EXEC SQL UPDATE STAFF11
             SET GRADE = 5
             WHERE EMPNUM = 'E3' END-EXEC
           MOVE SQLCODE TO SQL-COD
           MOVE SQLCODE TO code1
           EXEC SQL UPDATE STAFF11
             SET EMPNAME = 'Tom'
             WHERE EMPNUM = 'E3' END-EXEC
           MOVE SQLCODE TO SQL-COD
           MOVE SQLCODE TO code2
           EXEC SQL SELECT COUNT(*) INTO :count1
             FROM STAFF11
             WHERE EMPNAME = 'Susan' AND GRADE = 11 END-EXEC
           MOVE SQLCODE TO SQL-COD
           DISPLAY " The correct answer is:"
           DISPLAY "         code1 < 0,code2 < 0,count = 1."
           DISPLAY " Your answer is:"
           DISPLAY "         code1 = ", code1 ",code2 = ", code2
           DISPLAY ",count1= ", count1
           if (code1  <  0  AND  code2  <  0  AND  count1  =  1 ) then
             EXEC SQL INSERT INTO TESTREPORT
               VALUES('0320','pass','PCO'END-EXEC
             MOVE SQLCODE TO SQL-COD
             DISPLAY "                 *** pass ***     "
           else
             EXEC SQL INSERT INTO TESTREPORT
               VALUES('0320','fail','PCO'END-EXEC
             ADD 1 TO errcnt
             MOVE SQLCODE TO SQL-COD
             DISPLAY "       cdr007.pco  *** fail ***     "
           END-IF
           DISPLAY "================================================"

           DISPLAY  " "
           EXEC SQL COMMIT WORK END-EXEC
           MOVE SQLCODE TO SQL-COD
      ****************** END TEST0320 *****************************



      ******************** BEGIN TEST0321 *******************
      *This procedure tests if x NOT IN and NOT x IN of the
      *CHECK specification has the same meaning .           
      *          CHECK condition                            
      *              NOT GRADE IN (5,22) on STAFF12         

           DISPLAY "                     TEST0321             "
           DISPLAY "                  CHECK CONSTRAINTS    "
           DISPLAY "  SQL with Integrity Enhancement section 6.8"
           DISPLAY "  - - - - - - - - - - - - - - - - - - - - - - - - "
           DISPLAY  " "
           DISPLAY "        INSERT INTO STAFF12"
           DISPLAY "        VALUES('E3','Susan',11,'Hawaii');"
           DISPLAY  " "
           DISPLAY "        UPDATE STAFF12"
           DISPLAY "        SET GRADE = 5"
           DISPLAY "        WHERE EMPNUM = 'E3';"
           DISPLAY  " "
           DISPLAY "        SELECT COUNT(*) INTO :count1"
           DISPLAY "        FROM STAFF12"
           DISPLAY "        WHERE GRADE = 11;"
           EXEC SQL DELETE FROM STAFF12 END-EXEC
           MOVE SQLCODE TO SQL-COD
           EXEC SQL INSERT INTO STAFF12
             VALUES('E3','Susan',11,'Hawaii'END-EXEC
           MOVE SQLCODE TO SQL-COD
           EXEC SQL UPDATE STAFF12
             SET GRADE = 5
             WHERE EMPNUM = 'E3' END-EXEC
           MOVE SQLCODE TO SQL-COD
           EXEC SQL SELECT COUNT(*) INTO :count1
             FROM STAFF12
             WHERE GRADE = 11 END-EXEC
           MOVE SQLCODE TO SQL-COD
           DISPLAY " The correct answer is:"
           DISPLAY "         code1 < 0,count = 1."
           DISPLAY " Your answer is:"
           DISPLAY "         code1 = ", code1
           DISPLAY ",count1= ", count1
           if (code1  <  0  AND  count1  =  1 ) then
             EXEC SQL INSERT INTO TESTREPORT
               VALUES('0321','pass','PCO'END-EXEC
             MOVE SQLCODE TO SQL-COD
             DISPLAY "                 *** pass ***     "
           else
             EXEC SQL INSERT INTO TESTREPORT
               VALUES('0321','fail','PCO'END-EXEC
             ADD 1 TO errcnt
             MOVE SQLCODE TO SQL-COD
             DISPLAY "       cdr007.pco  *** fail ***     "
           END-IF
           DISPLAY "================================================"

           DISPLAY  " "
           EXEC SQL COMMIT WORK END-EXEC
           MOVE SQLCODE TO SQL-COD
      ****************** END TEST0321 *****************************



      ******************** BEGIN TEST0322 *******************
      *This test check the constraint NOT NULL in column    
      *definition constraint.                               
      *      CHECK condition                                
      *            NOT NULL   in EMPNAME def. of STAFF15    
      *    INSERT NULL INTO EMPNAME explicitly              


           DISPLAY "                     TEST0322             "
           DISPLAY "                     CHECK CONSTRAINT     "
           DISPLAY "      SQL with Integrity Enhancement section
      -    " 6.5,6.6"
           DISPLAY "      - - - - - - - - - - - - - - - - - - - - - "
           DISPLAY  " "
           DISPLAY "        INSERT INTO STAFF15"
           DISPLAY "        VALUES('E1','Alice',52,'Deale');"
           DISPLAY  " "
           DISPLAY "        UPDATE STAFF15"
           DISPLAY "        SET EMPNAME = NULL"
           DISPLAY "        WHERE EMPNUM = 'E1';"
           DISPLAY  " "
           DISPLAY "        SELECT COUNT(*) INTO:count1"
           DISPLAY "        FROM STAFF15"
           DISPLAY "        WHERE EMPNAME = 'Alice';"
           MOVE 0 TO count1
           EXEC SQL DELETE FROM STAFF15 END-EXEC
           MOVE SQLCODE TO SQL-COD
           EXEC SQL INSERT INTO STAFF15
             VALUES('E1','Alice',52,'Deale'END-EXEC
           MOVE SQLCODE TO SQL-COD
           EXEC SQL UPDATE STAFF15
             SET EMPNAME = NULL
             WHERE EMPNUM = 'E1' END-EXEC
           MOVE SQLCODE TO SQL-COD
           MOVE SQLCODE TO code1
           EXEC SQL SELECT COUNT(*) INTO:count1
             FROM STAFF15
             WHERE EMPNAME = 'Alice' END-EXEC
           MOVE SQLCODE TO SQL-COD
           DISPLAY " The correct answer is :"
           DISPLAY "           code1 is less than 0."
           DISPLAY "           count1 is 1"
           DISPLAY " Your answer is :"
           DISPLAY "           code1  is ", code1
           DISPLAY "           count1 is ", count1
           if (code1  <  0  AND  count1  =  1then
             EXEC SQL INSERT INTO TESTREPORT
               VALUES('0322','pass','PCO'END-EXEC
             MOVE SQLCODE TO SQL-COD
             DISPLAY "                 *** pass ***     "
           else
             EXEC SQL INSERT INTO TESTREPORT
               VALUES('0322','fail','PCO'END-EXEC
             ADD 1 TO errcnt
             MOVE SQLCODE TO SQL-COD
             DISPLAY "       cdr007.pco  *** fail ***     "
           END-IF
           DISPLAY "================================================"

           DISPLAY  " "
           EXEC SQL COMMIT WORK END-EXEC
           MOVE SQLCODE TO SQL-COD
      **************** END TEST 0322 **********







      **** TESTER MAY CHOOSE TO INSERT CODE FOR errcnt > 0
           STOP RUN.

      *    ****  Procedures for PERFORM statements

Messung V0.5 in Prozent
C=85 H=100 G=92

¤ Dauer der Verarbeitung: 0.18 Sekunden  (vorverarbeitet am  2026-06-15) ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

PVS Prover

Isabelle Prover

NIST Cobol Testsuite

Cephes Mathematical Library

Vienna Development Method

Haftungshinweis

Diese beiden folgenden Angebotsgruppen bietet das Unternehmen

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.