I am in the process of preparing myself for a VSAM related project set to take off by the year end. I have very little experience in VSAM and so spending some extra hours at office writing some simple VSAM codes. What I am trying now is to read a VSAM using the alternate index defined.
Code:
000100 ID DIVISION.
000200 PROGRAM-ID. SPABC501.
000600 DATE-WRITTEN. 11/17/2010.
000700 DATE-COMPILED.
000100*---------------------------------------------------------------*
000110*---------------- PROGRAM DESCRIPTION --------------------------*
000120*---------------------------------------------------------------*
000220* PURPOSE & FLOW: *
000230* THIS BATCH PROGRAM IS WRITTEN TO SEE HOW KSDS FILE ACCESS *
000240* IS DONE *
000000* THIS PROGRAM WILL READ KSDS FILE BASED ON THE AIX KEY (SSN) *
000000* PROVIDED IN SYSIN AND DISPLAY THE RELATED INFORMATION *
000410*---------------------------------------------------------------*
000420*--------------- PROGRAM MODIFICATION -------------------------*
000430*---------------------------------------------------------------*
000450* MOD-DATE PROGRAMMER MOD DESCRIPTION *
000000* -------- ---------- -----------------------------------------*
000000* 20101117 XXXXXXX INTIAL-VERSION
000550*---------------------------------------------------------------*
000000
001100*---------------------------*
001200 ENVIRONMENT DIVISION.
001300*---------------------------*
000000
001400 CONFIGURATION SECTION.
001500 INPUT-OUTPUT SECTION.
000000
001600 FILE-CONTROL.
000000
000000 SELECT EMP-SSN-FILE
000000 ASSIGN TO ESALFILE
000000 ORGANIZATION INDEXED
000000 ACCESS MODE RANDOM
000000 RECORD KEY ESSN-EMP-NBR
000000 ALTERNATE KEY ESSN-EMP-SOCIALSECNBR
000000 FILE STATUS FS-ESSN.
000000
001700*---------------------------*
001800 DATA DIVISION.
001900*---------------------------*
001400
001500 FILE SECTION.
001600
000000 FD EMP-SSN-FILE
000000 RECORD CONTAINS 80 CHARACTERS.
000000 01 ESSN-REC.
000000 05 ESSN-EMP-NBR PIC X(08).
000000 05 ESSN-EMP-NAME PIC X(40).
000000 05 ESSN-EMP-SOCIALSECNBR PIC X(12).
001700 05 ESSN-EMP-FILLER PIC X(20).
001800
001400*---------------------------*
001500 WORKING-STORAGE SECTION.
001600*---------------------------*
001800
001400 01 WS-ESSN-FILE.
000000 05 WS-ESSN-EMP-NBR PIC 9(08).
000000 05 WS-ESSN-EMP-NAME PIC X(40).
000000 05 WS-ESSN-EMP-SOCIALSECNBR PIC X(12).
000000 05 WS-ESSN-EMP-FILLER PIC X(20).
001500
001400 01 WORKING-STORAGE-SECTION.
000000 05 WS-CNT PIC S9(04) COMP.
000000 05 WS-SUB PIC S9(04) COMP.
000000 05 WS-MSG PIC X(10).
000000 05 FS-ESSN PIC 9(02).
001500
001400*---------------------*
000000 PROCEDURE DIVISION.
000000*---------------------*
001500
001800 0000-MAINLINE.
001900
000000 PERFORM 1000-INITIALIZATION
000000 THRU 1000-EXIT
000000
000000 PERFORM 2000-MAIN-PROCESS
000000 THRU 2000-EXIT
000000
000000 PERFORM 3000-END-PROCESS
000000 THRU 3000-EXIT
000000
000000 GOBACK.
000000/
000000*------------------------------*
000000 1000-INITIALIZATION.
000000*------------------------------*
000000
000000 OPEN INPUT EMP-SSN-FILE
000000 IF FS-ESSN NOT EQUAL ZERO
000000 DISPLAY 'FILE ERROR ON OPEN, STATUS -> ' FS-ESSN
000000 PERFORM 9000-ABEND
000000 END-IF
000000
000000 INITIALIZE WS-ESSN-FILE
000000
000000 MOVE ZEROES TO WS-CNT
000000 WS-SUB
000000 .
000000
000000 1000-EXIT.
000000 EXIT.
000000/
000000*------------------------------*
000000 2000-MAIN-PROCESS.
000000*------------------------------*
000000
000000 ACCEPT WS-ESSN-EMP-SOCIALSECNBR
000000
000000 MOVE WS-ESSN-EMP-SOCIALSECNBR
000000 TO ESSN-EMP-SOCIALSECNBR
000000
000000 READ EMP-SSN-FILE KEY IS ESSN-EMP-SOCIALSECNBR
000000 IF FS-ESSN NOT EQUAL ZERO
000000 DISPLAY 'FILE ERROR ON READ, STATUS -> ' FS-ESSN
000000 PERFORM 9000-ABEND
000000 ELSE
000000 DISPLAY ESSN-REC
000000 END-IF
000000 .
000000
000000 2000-EXIT.
000000 EXIT.
000000/
000000*------------------------------*
000000 3000-END-PROCESS.
000000*------------------------------*
000000
000000 CLOSE EMP-SSN-FILE
000000
000000 DISPLAY 'PROGRAM RUN SUCCESSFULLY'
000000 DISPLAY 'BYE-BYE'
000000 .
000000
000000 3000-EXIT.
000000 EXIT.
000000/
000000*------------------------------*
000000 9000-ABEND.
000000*------------------------------*
000000
000000 DISPLAY 'SPABC501 HAS ABENDED'
000000 DISPLAY 'BYE-BYE'
000000 GOBACK
000000 .
Not sure what I am missing out , ofcourse I have never tried this before either, so not sure what to try next. For now all I can think of is to get the VSAM file status also and see if that helps.
By the way I am able to read this file using the primary index (in another program) by changing nothing but the READ statement (and accepting a value for the emp number). So I am guessing something extra/different is needed for AIX read.