Page 1 of 1

How to read VSAM backward

PostPosted: Wed Jul 23, 2008 1:22 am
by PauloCaze
Hi list,

I want to read a VSAM KSDS file backward from some key. Is it possible?

Thanks in advance.

Re: How to read VSAM backward

PostPosted: Wed Jul 23, 2008 2:54 am
by dick scherrer
Hello,

There may not be a simple COBOL answer for your requirement.

This was found in another forum:
I need to read a VSAM/KSDS file backwards. We do this all the time with Assembler I/O modules, but we can't find a READ PREVIOUS verb in the Cobol language that the compiler will accept.

Is is possible to read a VSAM/KSDS file backwards in Cobol?

and the response was:
The READ file-name PREVIOUS is NOT in the current version of COBOL unless you are using a 2002 compatible COBOL, like Microfocus NET EXPRESS 4.0 or later. Even IBM's newest Enterprise COBOL 3.4 does not do this yet. (I have the manual.)
It is supported in CICS via a browse with GET PREVIOUS.

If you don't have to read a lot of data, such as just 1 or 2 records prior to some other record you can write an almost there routine: (You really need to understand your data and key relationships)

READ file-name
Decrement some right most key value by some value
and then:
Start FILE-NAME key is record-key
read next file-name
(you need to keep track of the results and check for when you have the record you started with, etc.)
Kluggy at best.
Otherwise, if you need a lot of this, create an alternate key value in binary-inverted sequence and do a read next on the binary-inverted key value.


If you or someone in your group knows assembler, that may be a way to go. Adding an inverted key would work, but may not be desirable - you will need to determine a "good" solution for your environment.

Good luck and let us know how you meet the requirement :)

Re: How to read VSAM backward

PostPosted: Wed Jul 23, 2008 2:55 am
by MrSpock
PauloCaze wrote:Is it possible?


No, it is not. And it's not for QSAM datasets either. You can use the File-Aid product (from Compuware) to do this, and an Assembler program can handle this. It's not possible in COBOL or most other languages.

Re: How to read VSAM backward

PostPosted: Wed Jul 23, 2008 10:30 pm
by PauloCaze
Thanks to all replies!
Now I'm convinced that I must do an Assembler routine in order to archieve this issue.

Re: How to read VSAM backward

PostPosted: Thu Jul 24, 2008 4:06 am
by dick scherrer
You're welcome :)

Now I'm convinced that I must do an Assembler routine in order to archieve this issue.
You will probably want to get official permission to write assembler code that will ever be used for production. Many organizations no longer permit assembler code because they are not staffed to support assembler.

Given that cobol cannot do this and also given that there are a few million bits of cobol code that process vsam data, there is probably some other way to meet your requirement. . .