Showing posts with label COBOL. Show all posts
Showing posts with label COBOL. Show all posts

Sunday, 23 October 2016

Cobol - DB2 bind process

Precompiler:


The DB2 Precompiler splits the program into two parts: a COBOL and a DB2 part. The embedded SQL is stripped out of the program and put into a partitioned data set (PDS) member, called a DBRM. Just as the COBOL part has to be compiled, the DBRM part has to go through BIND process to create the run-time executable code for the DB2 portion of the COBOL program. To help the COBOL and DB2 part to find each other later at run time, the precompiler engraves each with identical timestamps called
consistency tokens. 


Bind plan:
You can BIND the DBRM into a PLAN (the old way), or you can BIND the instructions into a PACKAGE.


Plan:
A PLAN is an executable module containing the
access path logic produced by the DB2 optimizer. The DBRMs of more than one program or PACKAGES can be bound into a PLAN.


Package:
A PACKAGE is a single, bound DBRM with optimized access paths. The DBRM of a single program is bound into a PACKAGE. To execute a PACKAGE, it should be included in the package list of a PLAN. PACKAGEs are not directly executed, they are only indirectly executed when the PLAN in which they are contained executes.

DBRM & Plan:
The relationship between a
DBRM and a PLAN is one-to-many, the relationship between a DBRM and a PACKAGE is always one-to-one. 


Bind process:
As the number of DBRMs bound to a PLAN increases, binding the DBRM into a PLAN is not recommended. If we need to precompile and bind a new program or one of the programs changes and it is to be precompiled and bound again, all the programs (not just the modified/added program) will be rebound into the PLAN again. Then the BIND process could take hours to complete.

On the other hand, if a DBRM is bound to a PACKAGE and if the program is modified, only that PACKAGE would have to be rebound.


Collection:
A collection is simply a way of grouping PACKAGEs into meaningful groups. You could use COLLECTIONs to separate programs for different application areas, such as payroll and inventory. Another use might be to have customized set of BIND parameters associated with different COLLECTIONs.


Run Time:
At run time, the load module starts up and eventually hits a paragraph containing a CALL to DB2. Then the COLLECTIONs named in the PLAN are searched for the PACKAGE with the same name and consistency token. If you don't find it anywhere in DB2, you get an
-805 error. If you're using the older technique of binding DBRMs directly into PLANs, then an unsuccessful search will result in an -818 error code.

Sunday, 4 September 2016

Delete record using CURSOR

Using below COBOL program you could fetch a particular record from database and delete it using a query;

IDENTIFICATION DIVISION.
PROGRAM-ID. DELCUR.
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
                EXEC SQL
                    INCLUDE NMTAB
                END-EXEC.
                EXEC SQL
                    INCLUDE SQLCA
                END-EXEC.
PROCEDURE DIVISION.
                PERFORM 100-MAIN-PARA.
100-MAIN-PARA.
                EXEC SQL
                     DECLARE CUR CURSOR FOR
                     SELECT ID,NAME FROM NMTAB
                    WHERE ID =”ID1022” FOR UPDATE OF NMTAB
                END-EXEC.
                EXEC SQL
                    OPEN CUR
                END-EXEC.
                PERFORM 200-UPD-PARA.
                EXEC SQL
                    CLOSE CUR
                END-EXEC.
                STOP RUN.
200-UPD-PARA.
                EXEC SQL
                     FETCH CUR INTO :MID, :MNAME
                END-EXEC.
                IF MID=”ID1022”
                EXEC SQL
                  DELETE FROM NMTAB
                 WHERE CURRENT OF CUR
                END-EXEC.
                ELSE
                DISPLAY “THE RECORD IS NOT FOUND”.

In the above program we have declared a cursor CUR to select a particular record from table NMTAB. Open the cursor perform the para where the record will be deleted using the query once the record has been fetched. Once done close the cursor and stop the program.

TABLE:

ID                     NAME                 JOB
M1011                  KARTI                SOFTWARE
M1022                  RAVI                 POLICE

AFTER PROGRAM:

ID                     NAME                 JOB
M1011                  KARTI                SOFTWARE




Question on COMP in COBOL program

1. Sign storage in COMP-3 field,

The sign indicator is always stored at the last bit.
If your number is +100, it stores hex 0C in the last byte.
If your number is -101, it stores hex 1D in the last byte.

2. Sign stored in COMP field.

The Sign is stored in the Most significant bit.
Bit is ON if -ve.
Bit is OFF if +ve.

3. difference between COMP & COMP-3.

COMP is a binary storage format.
COMP-3 is a Packed decimal format.

4. difference between COMP-1 & COMP-2.

COMP-1 - Represented as Single floating point. Uses 4 bytes.
COMP-2 - Represented as Double floating point. Uses 8 bytes.

5. S9(7) COMP-3 field occupy?

According to the formula  INT((n + 1)/2) 
n=7
INT((7+1)/2)) = 4.
This will take 4 bytes.

6. S9(8) COMP field occupy?

4 bytes. As the number of bytes are divided by 2.

7. S9(7) SIGN TRAILING SEPARATE field occupy?

8 bytes as the sign will remain as 1 byte due to trailing separate.


Thursday, 1 September 2016

How to find special character in String using COBOL program

How to check special character in a string and replace with spaces using COBOL program.


01  TEMP-VAR                            PIC X(10) VALUE " INS#PECT ".
01  TEMP-VAR-LEN                   PIC 9(02) VALUE ZERO.
01  TEMP-VAR-COUNT             PIC 9(02) VALUE ZERO.
01  TEMP-CHAR-COUNT          PIC 9(02) VALUE ZERO.
01  TEMP-CHAR                         PIC X(10) VALUE SPACES.
01  TEMP-CHK-VAR                  PIC X(10) VALUE SPACES.


MOVE LENGTH OF TEMP-VAR TO TEMP-VAR-LEN.      

MOVE 0                   TO TEMP-VAR-COUNT.      
      
PERFORM VARYING TEMP-CHAR-COUNT FROM 1 BY 1                
            UNTIL TEMP-CHAR-COUNT > TEMP-VAR-LEN        

  MOVE  TEMP-VAR(TEMP-CHAR-COUNT:1) TO TEMP-CHAR  

  ADD 1                  TO TEMP-VAR-COUNT                

  EVALUATE TEMP-CHAR                                  
     WHEN ‘#’                                  
        MOVE SPACES TO TEMP-CHG-VAR(WS-VAR-COUNT:1)
     WHEN OTHER
        MOVE TEMP-CHAR TO TEMP-CHK-VAR(WS-VAR-COUNT:1)
  END-EVALUATE

END-PERFORM.


Here the logic is:
To get the length of the string and perform until the complete string has been checked, each word is checked using the EVALUATE and if the special character is found it will be replaced with spaces or the same character will be moved into the variable using reference modification. 

How to remove spaces in a String

How to remove front and back spaces in a variable and write it in middle of two variable,

01  VAR-SPACE            PIC X(10) VALUE '   DATA   '.
01  LEAD-SPACE         PIC 9(04)  COMP.
01  TRAIL-SPACE        PIC 9(04)  COMP.
01  LENG-SPACE         PIC 9(04)  COMP.
01  FIRST-VAR             PIC X(07) VALUE 'VALID -'.
01  TRAIL-VAR            PIC X(10) VALUE '- REQUIRED'.
01  FINAL-VAR            PIC X(21) VALUE SPACES.


INSPECT              VAR-SPACE
      TALLYING     LEAD-SPACE          
      FOR LEADING SPACES    
                 
INSPECT    FUNCTION REVERSE(VAR-SPACE)
     TALLYING    TRAIL-SPACE          
     FOR LEADING SPACES      
                
COMPUTE  SPACE-LENG =                        
                  LENGTH OF  VAR-SPACE - LEAD-SPACE - TRAIL-SPACE     
          
ADD    1                    TO   LEAD-SPACE    

STRING FIRST-VAR DELIMITED BY SIZE  
       VAR-SPACE (LEAD-SPACE:SPACE-LENG)
                                DELIMITED BY SIZE
       TRAIL-VAR   DELIMITED BY SIZE  
       INTO FINAL-VAR.    

DISPLAY "The result will be: " FINAL-VAR.


The result will be: VALID -DATA- REQUIRED.

Here the spaces which are present in front and back of 'VAR-SPACE' variable has to be removed.
So we have used INSPECT function to check for number of spaces in front and back using TALLYING function.
Then using reference modification only the DATA is moved after removing the leading and trailing spaces.

Sunday, 22 December 2013

To remove trailing space

PROCEDURE DIVISION.

MOVE 0 TO TRAIL-SPACE-VAR.
MOVE 0 TO TEMP-VAR.
INSPECT FUNCTION REVERSE(VAR1) TALLYING TRAIL-SPACE-VAR FOR LEADING SPACES.
COMPUTE TEMP-VAR = LENGTH OF VAR1 - TRAIL-SPACE-VAR.

 ADD 1 TO TRAIL-SPACE-VAR
STRING  VAR1(TRAIL-SPACE-VAR:TEMP-VAR) DELIMITED BY SIZE
                VAR-END   DELIMITED BY SIZE
                INTO REC.
PERFORM WRITE-PARA.    

To remove leading spaces

PROCEDURE DIVISION.

MOVE 0 TO LEAD-SPACE-VAR.
MOVE 0 TO TEMP-VAR.
INSPECT VAR1 TALLYING LEAD-SPACE-VAR FOR LEADING SPACES.
COMPUTE TEMP-VAR = LENGTH OF VAR1 - LEAD-SPACE-VAR.

ADD 1 TO LEAD-SPACE-VAR
STRING VAR-FRONT DELIMITED BY SIZE
               VAR1(LEAD-SPACE-VAR:TEMP-VAR) DELIMITED BY SIZE
               INTO RECORD-VAL.
PERFORM WRITE-PARA.    

Sunday, 1 September 2013

Sample program to compare two input files and write to output file

       IDENTIFICATION DIVISION.
       PROGRAM-ID. PROG004.

       ENVIRONMENT DIVISION.
       INPUT-OUTPUT SECTION.
       FILE-CONTROL.
             SELECT INFILE1 ASSIGN TO DD1
             ORGANIZATION SEQUENTIAL
             ACCESS SEQUENTIAL
             FILE STATUS INFS1.

             SELECT INFILE2 ASSIGN TO DD2
             ORGANIZATION SEQUENTIAL
             ACCESS SEQUENTIAL
             FILE STATUS INFS2.

             SELECT OUTFILE ASSIGN TO DD3
             ORGANIZATION SEQUENTIAL
             ACCESS SEQUENTIAL
             FILE STATUS OUTFS.

       DATA DIVISION.
       FILE SECTION.
       FD INFILE1.
       01 FS-INREC1.
          88 IN1-EOF               VALUE HIGH-VALUES.
          05 FS-ID                 PIC 9(3).
          05 FILLER                PIC X(1).
          05 FS-NAME               PIC X(25).
          05 FILLER                PIC X(1).
          05 FS-CLASS              PIC X(5).
          05 FILLER                PIC X(45).

       FD INFILE2.
       01 FS-INREC2.
          88 IN2-EOF               VALUE HIGH-VALUES.
          05 IS-ID                 PIC 9(3).
          05 FILLER                PIC X.
          05 IS-SUB1M              PIC 9(3).
          05 FILLER                PIC X.
          05 IS-SUB2M              PIC 9(3).
          05 FILLER                PIC X.
          05 IS-SUB3M              PIC 9(3).
          05 FILLER                PIC X.
          05 IS-SUB4M              PIC 9(3).
          05 FILLER                PIC X.
          05 IS-SUB5M              PIC 9(3).
          05 FILLER                PIC X.
          05 IS-SUB6M              PIC 9(3).
          05 FILLER                PIC X(53).

       FD OUTFILE.
       01 FS-OUTREC.
          05 OS-ID                 PIC 9(3).
          05 FILLER                PIC X.
          05 OS-NAME               PIC X(25).
          05 FILLER                PIC X.
          05 OS-CLASS              PIC X(5).
          05 FILLER                PIC X.
          05 OS-TOTAL              PIC 9(3).
          05 FILLER                PIC X.
          05 OS-GRADE              PIC X(2).
          05 FILLER                PIC X(38).

       WORKING-STORAGE SECTION.
       77 INFS1                    PIC XX.
       77 INFS2                    PIC XX.
       77 OUTFS                    PIC XX.
       01 TOTAL-M                  PIC 9(3).
       01 AVG-M                    PIC 9(3).
       01 GRADE-M                  PIC X(2).
       01 STUDMRK1            PIC 9(2).
       01 STUDMRK2            PIC 9(2).
       01 STUDMRK3            PIC 9(2).
       01 STUDMRK4            PIC 9(2).
       01 STUDMRK5            PIC 9(2).
       01 STUDMRK6            PIC 9(2).

           EXEC SQL
                INCLUDE STUDBLE
           END-EXEC.
           EXEC SQL
                INCLUDE SQLCA
           END-EXEC.


           EXEC SQL
                DECLARE CUR_STU CURSOR FOR SELECT STUD_ID,STUD_NAME,
                        STUD_CLASS,STUD_MRK1,
                        STUD_MRK2,STUD_MRK3,STUD_MRK4,STUD_MRK5
                        STUD_MRK6 FROM OZA062.STUDBLE
           END-EXEC.


       PROCEDURE DIVISION.

      ***  MAIN PARA IS SUSED TO DIRECT THE FLOW FOR THE PROGRAM IN ***
      ***                 RIGHT DIRECTION                           ***
       001-MAIN-PARA.
            PERFORM 002-OPEN-PARA.
            PERFORM 003-READ-PARA UNTIL IN1-EOF.
            PERFORM 009-CLOSE-PARA.

      ***   OPEN PARA WHERE ALL THE FLAT FILES ARE OPENED           ***
       002-OPEN-PARA.
            OPEN INPUT INFILE1.
            IF INFS1 NOT = '00'
            DISPLAY "ERROR IN OPEN INFILE1 : " INFS1
            PERFORM 009-CLOSE-PARA
            END-IF.
            OPEN INPUT INFILE2.
            IF INFS2 NOT = '00'
            DISPLAY "ERROR IN OPEN INFILE2 : " INFS2
            PERFORM 009-CLOSE-PARA
            END-IF.
            OPEN OUTPUT OUTFILE.
            IF OUTFS NOT = '00'
            DISPLAY "ERROR IN OPEN OUTFILE : " OUTFS
            END-IF.

             EXEC SQL
                  OPEN CUR_STU
             END-EXEC.
             IF SQLCODE NOT = 0 THEN
             DISPLAY "ERROR IN OPEN CURSOR" SQLCODE
             END-IF.

      *** READ PARA IS USED TO READ THE FIRST INFILE TO CHECK       ***
       003-READ-PARA.
            READ INFILE1 AT END PERFORM 005-FETCH-PARA.

            IF INFS1 NOT = '00' THEN
               DISPLAY "ERROR IN READING INFILE1: " INFS1
               PERFORM 009-CLOSE-PARA
            ELSE
               PERFORM 031-CHECK-PARA
            END-IF.

      *** CHECK PARA IS TO CHECK WEATHER THE FILE IS IN FILE2       ***
       031-CHECK-PARA.
            READ INFILE2 AT END SET IN2-EOF TO TRUE
            NOT AT END
            IF FS-ID = IS-ID THEN
               DISPLAY "INSERT PROCEED"
               PERFORM 004-INSERT-PARA
            ELSE
               DISPLAY "FILE NOT MATCH"
               PERFORM 032-LCHECK-PARA
            END-IF.

      *** LCHECK PARA IS TO CHECK WEATHER THE FILE IS PRESENT OR NOR ***
       032-LCHECK-PARA.
            READ INFILE2 PERFORM UNTIL FS-ID = IS-ID
            END-PERFORM.
            IF FS-ID = IS-ID THEN
            DISPLAY "FILE FOUND AT LCHECK"
            PERFORM 004-INSERT-PARA
            ELSE
            DISPLAY "FILE IS NOT PRESENT"
            END-IF.

      ***  HERE THE VALUES ARE INSERTED IN DATABASE TABLE           ***
       004-INSERT-PARA.
            MOVE FS-ID TO STUD-ID.
            MOVE FS-NAME TO STUD-NAME.
            MOVE FS-CLASS TO STUD-CLASS.
            MOVE IS-SUB1M TO STUD-MRK1.
            MOVE IS-SUB2M TO STUD-MRK2.
            MOVE IS-SUB3M TO STUD-MRK3.
            MOVE IS-SUB4M TO STUD-MRK4.
            MOVE IS-SUB5M TO STUD-MRK5.
            MOVE IS-SUB6M TO STUD-MRK6.

            EXEC SQL
                 INSERT INTO OZA062.STUDBLE VALUES(:STUD-ID,:STUD-NAME,
                     :STUD-CLASS,:STUD-MRK1,:STUD-MRK2,:STUD-MRK3,
                     :STUD-MRK4,:STUD-MRK5,:STUD-MRK6)
            END-EXEC.
            IF SQLCODE NOT = 0 THEN
              DISPLAY "ERROR SQLCODE: " SQLCODE
              PERFORM 009-CLOSE-PARA
            ELSE
              DISPLAY "INSERT SUCCESS"
            END-IF.

      ***  FETCH PARA IS USED TO FETCH THE VAUES FROM THE TABLE     ***
       005-FETCH-PARA.


             EXEC SQL
                  FETCH CUR_STU INTO :STUD-ID,:STUD-NAME,:STUD-CLASS,
                     :STUD-MRK1,:STUD-MRK2,:STUD-MRK3,:STUD-MRK4,
                     :STUD-MRK5,:STUD-MRK6
             END-EXEC.
             IF SQLCODE = 0 THEN
                 DISPLAY "FETCH SUCCESS"
                 MOVE STUD-MRK1 TO STUDMRK1
                 DISPLAY STUDMRK1
                 MOVE STUD-MRK2 TO STUDMRK2
                 MOVE STUD-MRK3 TO STUDMRK3
                 MOVE STUD-MRK4 TO STUDMRK4
                 MOVE STUD-MRK5 TO STUDMRK5
                 MOVE STUD-MRK6 TO STUDMRK6
                 PERFORM 006-CALC-PARA
             ELSE
                 DISPLAY "ERROR IN FETCH PARA"
                 PERFORM 009-CLOSE-PARA
             END-IF.

      *** CALC PARA IS USED TO CALCULATE THE VALUES FOR GRADE       ***
       006-CALC-PARA.
             IF STUDMRK1 > 35 AND STUDMRK2 > 35 THEN
                 IF STUDMRK3 > 35 AND STUDMRK4 > 35 THEN
                     IF STUDMRK5 > 35 AND STUDMRK6 > 35 THEN
                         DISPLAY "WRITE PARA"
                         PERFORM 007-WRITE-PARA
                      ELSE
                         DISPLAY "CALCULATION STARTED"
                         PERFORM 005-FETCH-PARA
                      END-IF
                 ELSE
                    PERFORM 005-FETCH-PARA
                 END-IF
             ELSE
                PERFORM 007-WRITE-PARA
             END-IF.
      *      EVALUATE STUD-MRK1 >= 35 ALSO STUD-MRK2 >= 35 ALSO
      *               STUD-MRK3 >= 35 ALSO STUD-MRK4 >= 35 ALSO
      *               STUD-MRK5 >= 35 ALSO STUD-MRK6 >= 35
      *         WHEN TRUE ALSO TRUE ALSO TRUE ALSO TRUE ALSO TRUE
      *              ALSO TRUE PERFORM 007-WRITE-PARA
      *         WHEN OTHER PERFORM 005-FETCH-PARA
      *      END-EVALUATE.

      *** WRIRE PARA HERE THE VALUES ARE WRITTEN INTO THE OUFILE    ***
       007-WRITE-PARA.
              DISPLAY "WRITING STARTED".
              COMPUTE TOTAL-M = STUDMRK1 + STUDMRK2 + STUDMRK3 +
                                STUDMRK4 + STUDMRK5 + STUDMRK6.
              COMPUTE AVG-M = TOTAL-M / 6.

              EVALUATE AVG-M
                  WHEN 35 THRU 60 MOVE 'C' TO GRADE-M
                  WHEN 61 THRU 70 MOVE 'B' TO GRADE-M
                  WHEN 71 THRU 90 MOVE 'A' TO GRADE-M
                  WHEN 91 THRU 100 MOVE 'A+' TO GRADE-M
              END-EVALUATE.

              MOVE STUD-ID TO OS-ID.
              MOVE STUD-NAME TO OS-NAME.
              MOVE STUD-CLASS TO OS-CLASS.
              MOVE TOTAL-M TO OS-TOTAL.
              MOVE GRADE-M TO OS-GRADE.
              WRITE FS-OUTREC.
              PERFORM 005-FETCH-PARA.

      ***         HERE THE END OF FILE AND TABLE                   ***
       009-CLOSE-PARA.
              EXEC SQL
                   CLOSE CUR_STU
              END-EXEC.

              CLOSE INFILE1 INFILE2 OUTFILE.
              STOP RUN.

Thursday, 16 May 2013

COMP and its types in COBOL

COMP .

              It is a Binary storage format. In most significant bit, Bit is on if -ve, off if +ve.
no of bytes in COMP = (n/2)
Data Length                                           Length in COBOL
S9(1) to S9(4)                                         2 bytes
S9(5) to S9(9)                                         4 bytes
S9(10) to S9(18)                                     8 bytes

For example: S9(8) COMP  occupy how many bytes. = 4 bytes

COMP-1 and COMP-2.

          COMP-1 - Single precision floating point. Uses 4  byte
          COMP-2 - Double precision floating point. Uses 8 byte.
here for COMP-1 and COMP-2 no PIC clause is given

for example: 01 WS-VAL USAGE COMP-1.
                      01 WS-VAL USAGE COMP-2.

COMP-3.

            COMP-3 is an packed decimal format.

Packed decimal format: Sign stored as a HEX value in the last nibble (4bits) of the storage.

            In COMP-3 the sign is stored in last nibble. For example if your number is +100, it stores HEX 0C in the last byte same if the number is -102 then HEX 2D.
General formula for COMP-3 is INT((n/2)+1)

for example: if S9(7) COMP-3  will take 4 bytes
here n=7 so INT((7/2)+1) = 4 byte

COMP-4.

            Same as COMP.

Types of level in COBOL....

Level Numbers available are    

01-49      Group or elementary items
66           Renames clause
77           Independent elementary      data items
88           Condition names

77 level

 Elementary level item. Cannot be subdivisions of other items (cannot be qualified), nor can they be subdivided themselves.

Syntax:
77 VAL        PIC X(4).

88 level 

88 level is used for condition names.
The level 88 in the Data Division can be used to give condition names to the values that a field contains. A condition name entry specifies either a single value or a set of values for the condityional variable. When this level is specified you can use the condition name instead of is =equal to in the IF statement. Condition name should be specified under Level 88 immediately following the field description.
 
syntax:
DATA DIVISION.
WORKING-STORAGE SECTION.
01 COND            PIC X.
     88 ACCEPT    VALUE 'Y'.
     88 REJECT     VALUE 'N'.   
 77 WS-VAL         PIC X.

PROCEDURE DIVISION.  
          ACCPET  WS-VAL.
          IF ( ACCEPT )
              PROCEED
          END-IF.
          IF ( REJECT )
              ROLL BACK
          END-IF. 
          STOP RUN.

01-49 LEVEL.

Used to describe a record.

Syntax:
01 INREC.
     02 ID          PIC X(3).
          03 P-ID             PIC X(3).

66 level. 

Renames clause
It is used for regrouping of elementary data items in a record. It should be declared at 66 level.

syntax:
01 WS-REC
        05 WS-NAME          PIC X(03).
        05 WS-VALUE         PIC X(04).
        66 ADD-NAME  RENAMES WS-NAME.


Most common and most frequently and very Basic question asked in many interviews.....

COBOL - Common Business Oriented Language.

Divisions in COBOL.
           There are 4 divisions in COBOL. They are

1. IDENTIFICATION DIVISION
2. ENVIRONMENT DIVISION
3. DATA DIVISION
4. PROCEDURE DIVISION.

Different data types in COBOL.
            There are 3 data types in COBOL. They are

1. Numeric ( 9() )
2. Alpha-Numeric ( X() )
3. Alphabetic ( A() )


Types of perform in COBOL.....

IN-LINE perform :
                   in an in-line perform the paragraph name is omitted and it should be delimited by the END-PERFORM phrase.

syntax:

PROCEDURE DIVISION.
          PERFORM .......
                STATEMENT 1
                ....                  2
                ....                  3
          END-PERFORM.

 Here all the statements under the perform will get executed till the END-PERFORM phrase is reached.

The PERFORM statement formats are:
1.  Basic PERFORM
2.  TIMES phrase PERFORM
3.  UNTIL phrase PERFORM
4.  VARYING phrase PERFORM

Basic PERFORM.
                PERFORM para-1 thru para-2
               
                PERFORM
                      imperative statement
                END-PERFORM.

 PERFORM with UNTIL phrase
                PERFORM procedure-1 thru procedure-2 until condition-1.

If the condition is true the PERFORM statement is initiated, the specified procedures are not executed.

PERFORM with VARYING phrase
                PERFORM para-1 thru para-3 varying N from 1 by 1 until N > 5.

In the above example Para-1 thru Para-3 will be executed 5 times.   

Wednesday, 15 May 2013

How do you define a table/array in COBOL?


01 ARRAYS.
05 ARRAY1 PIC X(9) OCCURS 10 TIMES.
05 ARRAY2 PIC X(6) OCCURS 20 TIMES INDEXED BY WS-INDEX.


Code for Program to use multiple array in Cobol




IDENTIFICATION DIVISION.
PROGRAM-ID. ARR. 
 
DATA DIVISION.
01 ARR1.
   02 A OCCURS 3 TIMES.
      03 A1 OCCURS 3 TIMES.
         05 TEMP PIC  99.
01 I PIC 9.
01 J PIC 9.
 
PROCEDURE DIVISION.
 BEGIN.
    PERFORM VARYING I FROM 1 BY 1 UNTIL I>3
       PERFORM VARYING J FROM 1 BY 1 UNTIL J>3
           ACCEPT TEMP (I,J)
       END-PERFORM
    END-PERFORM.
    PERFORM VARYING I FROM 1 BY 1 UNTIL I>3
       PERFORM VARYING J FROM 1 BY 1 UNTIL J>3
           DISPLAY TEMP (I,J) WITH NO ADVANCING
       END-PERFORM
           DISPLAY " "
    END-PERFORM.
         STOP RUN.



Sunday, 12 May 2013

SSRANGE, NOSSRANGE

ssrange is a compiler option is used to give the range of the records for all the operations.nossrange is default.

suppose we have 10 records in a table and tries to read 11th record then the job will abend, to avoid this we need to give compiler option ssrange.

Saturday, 11 May 2013

Difference between NEXT SENTENCE and CONTINUE......

NEXT SENTENCE: THE SENTENCE IS COLLECTION OF STATEMENTS AND IS ALWAYS END WITH PERIODE (.)
SO NEXT SENTENCE MEANS THE CONTROL PASSES TO NEXT SENTENCE AFTER THE PERIODE.
CONTINUE:- TRANSFER THE CONTROL AFTER THE END SCOPE TERMINATOR, MEANS CONTINOUS THE EXCUTION NOT CHECK THE CONDITION.


IF A>B
IF A>C
DISPLAY ‘A’
NEXT SENTENCE
END-IF
DISPLAY ‘C’
END-IF.
DISPLAY ‘B’.


If A=10, B=5, C=7.

ans : A B  

Which DIVISION is mandatory in a program in COBOL...?

COBOL can get executed even if there is no divisions except ID DIVISION.

IDENTIFICATION DIVISION.
PROGRAM-ID. PROG001.

 just execute this above two lines you would get the program executed without showing any error or abend.


Friday, 10 May 2013

calculations in COBOL...

WORKING-STORAGE SECTION.
01 A                        PIC 99V0 VALUE 5.
01 B                        PIC 9V9 VALUE 6.
01 C                        PIC 99V9 VALUE 2.8.
01 D                        PIC 99 VALUE 3.

PROCEDURE DIVISION.
COMPUTE A ROUNDED B C = A + B * C / D.
STOP RUN.


ANS:

A = 11, B = 0.6, C = 10.6.

How can we increment subscript and index....?



SUBCRIPT:
CAN BE INCREMENT OR DECREMENT USING ARITHMETIC OPERATIONS
INDEX:
CAN BE INCREMENT OR DECREMENT USING SET VERB

Thursday, 2 May 2013

Program to change UC to LC & LC to UC...

IDENTIFICATION DIVISION.
PROGRAM-ID. PROG001.
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
77 CASE                         PIC A(6) VALUE 'ABcdEF'.
77 LCASE                      PIC A(6).
77 UCASE                      PIC A(6).
PROCEDURE DIVISION.
MOVE FUNCTION LOWER-CASE ( CASE ) TO LCASE.
DISPLAY LCASE.
MOVE FUNCTION UPPER-CASE ( CASE ) TO UCASE.
DISPLAY UCASE.
STOP RUN.

Expense Handler Application with advance technologies

Budget Planner  One of the application developed with Ionic 4 and Python-Flask.  Ionic 4 code:  https://github.com/logeshbuiltin/Expense...