In this section:
How to: |
Access Files store database access information used to translate report requests into the required IMS direct calls. For example, the Access File can contain the PSB name, the PCB name, the type of PCB, segment key types, and secondary index information.
In older versions of the adapter, some of these attributes were specified in the Master File instead of the Access File, and the Access File was optional. Those Master Files are still supported by the adapter, However, in current versions of the adapter using the DBCTL environment, you only need a Master File and Access File, and the Access File can contain any attributes needed for accessing the IMS data source.
An Access File consists of 80-character records in comma-delimited format. A record in an Access File contains a list of attributes and values, separated by commas and terminated with a comma and dollar sign (,$). This list is free-form and spans several lines if necessary.
You can specify attributes in any order. FOCUS reads blank lines, and lines starting with a dollar sign in column one, as comments.
In most environments, you select a PSB prior to invoking FOCUS. However, if you connect to IMS using the DBCTL environment, you select the PSB during your session, and you have the option of switching PSBs between requests.
You have two options for selecting a PSB within the session:
If you use an Access File, the adapter identifies the appropriate PSB when you reference a Master File in a request. The selection is automatic and transparent to you.
Access Files are members of a partitioned data set. The member name of an Access File within its partitioned data set must be the same as the member name of the corresponding Master File within its partitioned data set. At run time, the Access File data set is allocated to ddname ACCESS. (This allocation is optional if all PSB selection is dynamic.)
Note:
(FOC4295) ACCESS POINTS TO DIFFERENT PSBS IN JOIN
You have two options for selecting a PSB within the session:
If you use an Access File, the adapter identifies the appropriate PSB when you reference a Master File in a request. The selection is automatic and transparent to you.
The following is a sample Access File PSB attribute to the DI21PART Master File. The Access File is member DI21PART in the Access File library:
PSB=FOCSD,$
Each Access File will contain six or more attributes.
PSB=psbname,PCBNUMBER= pcb_number,PL1={NO|YES},WRITE={YES|NO},$ SEGNAME=segment_name, KEYTYPE=keytype,[NON_KEYED=NOMATCH,]$ ALTPCBNAME=index_name , ALTPCBNUMBER=index_PCB_number,$
where:
Is the name of the PSB to use. If the PSB does not exist, the following message is (generated) displayed:
(EDA4261) PSB MEMBER NOT FOUND: psbname
The position within the PSB that points to the database to be processed.
Indicates whether the PSB was generated with LANG=(PL/I, COBOL or Assembler). YES indicates PL/I. NO indicates COBOL or Assembler.
YES allows SQL update for this database.
NO does not allow SQL update for this database and is the default.
Are the segment names defined in the database definition.
Identifies the segment characteristics.
Possible values are:
S0 indicates that the segment is data sensitive and has no key.
S or S1 indicates that the segment is data sensitive and has a non-unique key.
S2 indicates that the segment is data sensitive and has a unique key.
SH or SH1 indicates that the segment is key sensitive and has a non-unique key.
SH2 indicates that the segment is key sensitive and has a unique key.
Inserts records into a non-keyed child segment without first doing a MATCH on the segment. With this attribute, you can insert a segment instance containing data based on a Master File different from the one used to insert prior instances. Without this attribute, you would get a FOC200 message if the data being inserted did not conform to the original Master File, and the record would not be inserted.
Identifies a secondary index database defined by the 'Procseq=' option within the PSB.
Identifies the PCB number of the index database.
The member name of an Access File must be the same as the member name of the corresponding Master File.
The following is a sample Access File corresponding to the DI21PART Master File.
PSB=DI21PSB, WRITE=NO PCBNUMBER=2, PL1=NO,,$ SEGNAME=PARTROOT, KEYTYPE=S2,$ SEGNAME=STANINFO, KEYTYPE=S2,$ SEGNAME=STOKCOUNT, KEYTYPE=S2,$ SEGNAME=CYCCOUNT, KEYTYPE=S2,$ SEGNAME=BAKORDR, KEYTYPE=S2,$
Reference: |
If you want to access a segment through a field in a segment that is not its sequence field (primary key), IMS provides the option of creating a secondary index on the field. In some situations, using a secondary index improves performance. The secondary index is itself a separate data source. Each of its records contains a value of the field to be indexed and a pointer to the target segment of the data source record containing that value.
When using a secondary index, IMS locates a record by first reading the index data source to retrieve the appropriate pointer and then using the pointer to read the data source.
If a PCB includes the parameter
PROCSEQ=indexDBDname
the named index is used as the main entry point into the data source.
One Master File and Access File can describe all primary and secondary indexes for a data source. Then, given a request, the adapter can examine all record selection tests to determine the best access path into the data source. The adapter can take advantage of this Auto Index Selection feature if:
PROCSEQ=indexDBDname
parameter that identifies the index DBD.
In the Master File, prior to the secondary index definitions, you must describe the entire segment of the data source. Every field listed in the DBD is an IMS sequence field or search field, and each secondary index is based on one or more of these fields. You must assign each secondary index field its appropriate alias, as described in Field Attributes.
Note: IMS allows for system-defined sub-sequence fields to make an index unique. The Master File can completely ignore the presence and length of such fields.
You can place information about secondary indexes in the Access File. No auxiliary virtual fields (that is, SKY groups/fields) are needed in the Master File.
Note: Existing .sky field suffix-based definitions are supported to ensure compatibility.
Two segments belonging to the same root path might be connected by secondary indexes:
One target segment may have many secondary indexes based on search fields from different source segments. The secondary index can be based on up to five base fields from the same segment.
Each PCB can be associated with only one index, primary or secondary. A secondary index is defined in the PROCSEQ parameter. When the synonym is created, a primary PCB number is chosen and placed in the PCBNUMBER attribute in the Access File PSB declaration. If the PSB contains several PCBs that define identical hierarchies, the primary PCB number is selected according to following rules:
The root segment is determined, and hierarchical entries processed, in the sequence corresponding to the primary PCB secondary index when an area sweep is performed.
The root is processed in the sequence corresponding to the physical sequence of segment instances for the non-keyed segment, and in the key sequence for key segments when an area sweep is performed.
Sequential numbers of all other PCBs of identical hierarchies associated with the same DBD are stored in the ALTPCBNUMBER attribute in the XDFLD Access File declaration.
Each DBD may be associated with any number of PCBs. Each PCB may have a PROCSEQ parameter to indicate an index key. The segment to which this key refers becomes the tree root segment. Therefore, it is possible to have different hierarchical structures associated with the same database. All identical hierarchies (the only difference is in the PROCSEQ key name) can be described by the same Master File. Different Master Files can be created for the various inverted hierarchies.
Access File XDFLD declarations are used to describe secondary indexes. There is a one-to-one relationship between XDFLD statements in the Access File and PROCSEQ parameters in the PCB.
There are two types of XDFLD declarations:
The XDFLD belongs to the tree root segment and must have an ALTPCBNUMBER parameter that refers to the appropriate PCB number. Each PROCSEQ parameter can represent an identical hierarchical structure. Multiple PROCSEQ parameters can be associated with multiple XDFLD declarations in the Access File. Only one such XDFLD statement is needed to build a qualified SSA in the request.
A SENSEG INDICES parameter may be associated with any segment and must not have an ALTPCBNUMBER attribute in the Access File.
The Access File may contain XDFLD declarations produced from information that is found in the INDICES parameter of the SENSEG macro in a PCB definition. Up to 32 different XDFLD declarations associated with a segment can be built from one SENSEG macro. Any number of such XDFLD declarations might be used to build a qualified SSA in the request. Both types of secondary indexes can be used simultaneously in the qualified SSA in the request.
Secondary indexes are physically stored in separate index databases. These databases are referenced by the PROCSEQ and INDICES parameters. One index database can be used to store up to 16 secondary indexes. Such a database, and the related indexes, is referred to as a shared secondary index.
You can use information from a shared secondary index DBD to create XDFLD declarations. The following files illustrate the required entries.
DBD and PSB
DBD NAME=DIX1DBD,ACCESS=(HIDAM,VSAM) DATASET DD1=DIX1KAPL,DEVICE=3380 SEGM NAME=PARTROOT,PARENT=0,BYTES=50,PTR=T LCHILD NAME=(SEG1,DIX1DBX0),PTR=INDX FIELD NAME=(PARTKEY,SEQ,U),TYPE=C,BYTES=17,START=1 FIELD NAME=PARTFIL1,TYPE=C,BYTES=8,START=18 FIELD NAME=PARTNAME,TYPE=C,BYTES=23,START=27 FIELD NAME=/SX1 LCHILD NAME=(X1SEG,DIX1DBX1),PTR=INDX XDFLD NAME=PARTNAMX,SRCH=PARTNAME,SUBSEQ=/SX1,NULLVAL=BLANK *
SEGM NAME=STANINFO,PARENT=PARTROOT,BYTES=85 FIELD NAME=(STANKEY,SEQ),TYPE=C,BYTES=2,START=1 FIELD NAME=STANFIL1,TYPE=C,BYTES=16,START=3 FIELD NAME=STANTYPE,TYPE=C,BYTES=3,START=19 FIELD NAME=STANFIL2,TYPE=C,BYTES=26,START=22 FIELD NAME=STANASST,TYPE=C,BYTES=4,START=48 FIELD NAME=STANFIL3,TYPE=C,BYTES=2,START=52 FIELD NAME=STANVALU,TYPE=C,BYTES=2,START=54 *
SEGM NAME=STOKSTAT,PARENT=PARTROOT,BYTES=160 FIELD NAME=(STOCKEY,SEQ),TYPE=C,BYTES=16,START=1 FIELD NAME=STOKFIL1,TYPE=C,BYTES=4,START=17 FIELD NAME=STOKNUMS,TYPE=C,BYTES=9,START=21 FIELD NAME=STOKFIL2,TYPE=C,BYTES=20,START=30 FIELD NAME=STOKFREQ,TYPE=C,BYTES=6,START=50 LCHILD NAME=(X2SEG,DIX1DBX2),PTR=INDX XDFLD NAME=CYCLNUMX,SRCH=CYCLNUMB,SEGMENT=CYCCOUNT, X SUBSEQ=/SX1,NULLVAL=BLANK *
SEGM NAME=CYCCOUNT,PARENT=STOKSTAT,BYTES=25 FIELD NAME=(CYCLKEY,SEQ),TYPE=C,BYTES=2,START=1 FIELD NAME=CYCLNUMB,TYPE=C,BYTES=8,START=3 FIELD NAME=CYCLFIL1,TYPE=C,BYTES=4,START=11 FIELD NAME=CYCLVALU,TYPE=C,BYTES=7,START=15 FIELD NAME=/SX1 *
SEGM NAME=BACKORDR,PARENT=STOKSTAT,BYTES=80 FIELD NAME=(BACKKEY,SEQ),TYPE=C,BYTES=10,START=1 FIELD NAME=BACKREFR,TYPE=C,BYTES=4,START=77 DBDGEN FINISH END
DBPCB01 PCB TYPE=DB,DBDNAME=DIX1DBD,PROCOPT=A,KEYLEN=49 SENSEG NAME=PARTROOT,PARENT=0 SENSEG NAME=STANINFO,PARENT=PARTROOT SENSEG NAME=STOKSTAT,PARENT=PARTROOT SENSEG NAME=CYCCOUNT,PARENT=STOKSTAT SENSEG NAME=BACKORDR,PARENT=STOKSTAT
DBPCB02 PCB TYPE=DB,DBDNAME=DIX1DBD,PROCOPT=A,KEYLEN=49, X PROCSEQ=DIX1DBX1 SENSEG NAME=PARTROOT,PARENT=0 SENSEG NAME=STANINFO,PARENT=PARTROOT SENSEG NAME=STOKSTAT,PARENT=PARTROOT SENSEG NAME=CYCCOUNT,PARENT=STOKSTAT SENSEG NAME=BACKORDR,PARENT=STOKSTAT
DBPCB03 PCB TYPE=DB,DBDNAME=DIX1DBD,PROCOPT=A,KEYLEN=49, X PROCSEQ=DIX1DBX2 SENSEG NAME=STOKSTAT,PARENT=0 SENSEG NAME=CYCCOUNT,PARENT=STOKSTAT SENSEG NAME=BACKORDR,PARENT=STOKSTAT SENSEG NAME=PARTROOT,PARENT=STOKSTAT SENSEG NAME=STANINFO,PARENT=PARTROOT PSBGEN LANG=ASSEM,PSBNAME=DIX1PSB,CMPAT=YES END
Master File:
FILENAME=DIX_DIX1DBD, SUFFIX=IMS , $ SEGMENT=PARTROOT, SEGTYPE=S0, $ FIELDNAME=PARTKEY, ALIAS=PARTKEY.KEY, USAGE=A17, ACTUAL=A17, $ FIELDNAME=PARTFIL1, ALIAS=PARTFIL1.IMS, USAGE=A8, ACTUAL=A8, $ FIELDNAME=FILL1, USAGE=A1, ACTUAL=A1, $ FIELDNAME=PARTNAME, ALIAS=PARTNAME.IMS, USAGE=A23, ACTUAL=A23, $ FIELDNAME=FILL2, USAGE=A1, ACTUAL=A1, $
SEGMENT=STOKSTAT, SEGTYPE=S0, PARENT=PARTROOT, $ FIELDNAME=STOCKEY, ALIAS=STOCKEY.KEY, USAGE=A16, ACTUAL=A16, $ FIELDNAME=STOKFIL1, ALIAS=STOKFIL1.IMS, USAGE=A4, ACTUAL=A4, $ FIELDNAME=STOKNUMS, ALIAS=STOKNUMS.IMS, USAGE=A9, ACTUAL=A9, $ FIELDNAME=STOKFIL2, ALIAS=STOKFIL2.IMS, USAGE=A20, ACTUAL=A20,$ FIELDNAME=STOKFREQ, ALIAS=STOKFREQ.IMS, USAGE=A6, ACTUAL=A6, $ FIELDNAME=FILL1, USAGE=A105, ACTUAL=A105, $
SEGMENT=CYCCOUNT, SEGTYPE=S0, PARENT=STOKSTAT, $ FIELDNAME=CYCLKEY, ALIAS=CYCLKEY.KEY, USAGE=A2, ACTUAL=A2, $ GROUP=CYCLNUMB, ALIAS=CYCLNUMB.IMS, USAGE=A8, ACTUAL=A8, $ FIELDNAME=CNMB1, USAGE=A3, ACTUAL=A3, $ FIELDNAME=CNMB2, USAGE=A3, ACTUAL=A3, $ FIELDNAME=CNMB3, USAGE=A2, ACTUAL=A2, $ FIELDNAME=CYCLFIL1, ALIAS=CYCLFIL1.IMS, USAGE=A4, ACTUAL=A4, $ FIELDNAME=CYCLVALU, ALIAS=CYCLVALU.IMS, USAGE=A7, ACTUAL=A7, $ FIELDNAME=FILL1, USAGE=A4, ACTUAL=A4, $
Access File:
PSB=DIX1PSB, WRITE=NO, PCBNUMBER=2, PL1=NO, $ SEGNAME=PARTROOT, KEYTYPE=S2, $ XDFLD=PARTNAMX, SRCH=PARTNAME, ALTPCBNUMBER=3, $ XDFLD=PARTFILX, SRCH=PARTFIL1, ALTPCBNUMBER=4, $ SEGNAME=STOKSTAT, KEYTYPE=S2, $ XDFLD=CYCLNUMX, SRCH=CNMB1/CNMB3/CNMB2, BASESEG=CYCCOUNT, $ SEGNAME=CYCCOUNT, KEYTYPE=S2, $
Master File:
FILENAME=DIX_DIX1DBD, SUFFIX=IMS , $ SEGMENT=STOKSTAT, SEGTYPE=S0, $ FIELDNAME=STOCKEY, ALIAS=STOCKEY.KEY, USAGE=A16, ACTUAL=A16, $ FIELDNAME=STOKFIL1, ALIAS=STOKFIL1.IMS, USAGE=A4, ACTUAL=A4, $ FIELDNAME=STOKNUMS, ALIAS=STOKNUMS.IMS, USAGE=A9, ACTUAL=A9, $ FIELDNAME=STOKFIL2, ALIAS=STOKFIL2.IMS, USAGE=A20, ACTUAL=A20, $ FIELDNAME=STOKFREQ, ALIAS=STOKFREQ.IMS, USAGE=A6, ACTUAL=A6, $ FIELDNAME=FILL1, USAGE=A105, ACTUAL=A105, $ SEGMENT=CYCCOUNT, SEGTYPE=S0, PARENT=STOKSTAT, $ FIELDNAME=CYCLKEY, ALIAS=CYCLKEY.KEY, USAGE=A2, ACTUAL=A2, $ GROUP=CYCLNUMB, ALIAS=CYCLNUMB.IMS, USAGE=A8, ACTUAL=A8, $ FIELDNAME=CNMB1, USAGE=A3, ACTUAL=A3, $ FIELDNAME=CNMB2, USAGE=A3, ACTUAL=A3, $ FIELDNAME=CNMB3, USAGE=A2, ACTUAL=A2, $ FIELDNAME=CYCLFIL1, ALIAS=CYCLFIL1.IMS, USAGE=A4, ACTUAL=A4, $ FIELDNAME=CYCLVALU, ALIAS=CYCLVALU.IMS, USAGE=A7, ACTUAL=A7, $ FIELDNAME=FILL1, USAGE=A4, ACTUAL=A4, $ SEGMENT=PARTROOT, SEGTYPE=U, PARENT=STOKSTAT, $ FIELDNAME=PARTKEY, ALIAS=PARTKEY.KEY, USAGE=A17, ACTUAL=A17, $ FIELDNAME=PARTFIL1, ALIAS=PARTFIL1.IMS, USAGE=A8, ACTUAL=A8, $ FIELDNAME=FILL1, USAGE=A1, ACTUAL=A1, $ FIELDNAME=PARTNAME, ALIAS=PARTNAME.IMS, USAGE=A23, ACTUAL=A23, $ FIELDNAME=FILL2, USAGE=A1, ACTUAL=A1, $
Access File:
PSB=DIX1PSB, WRITE=NO, PCBNUMBER=5, PL1=NO, $ SEGNAME=STOKSTAT, KEYTYPE=S2, $ XDFLD=CYCLNUMX, SRCH=CNMB1/CNMB3/CNMB2, BASESEG=CYCCOUNT,ALTPCBNUMBER=5, $ XDFLD=CYCLVALX, SRCH=CYCLVALU, BASESEG=CYCCOUNT, ALTPCBNUMBER=6, $ SEGNAME=CYCCOUNT, KEYTYPE=S2, $ SEGNAME=PARTROOT, KEYTYPE=S2, $ XDFLD=PARTNAMX, SRCH=PARTNAME, $ XDFLD=PARTFILX, SRCH=PARTFIL1, $
This example uses four secondary indexes:
Definition description:
Note: A qualified SSA is built for the target segment if at least one eligible screening condition is provided for the associated primary key, search field, or secondary key base source field.
The PATDB01 database has a primary index because it is a HIDAM database. It is also defined with three secondary indexes.
Five DBDs are associated with PATDB01: the DBD for the database, the DBD for the primary index, and one DBD for each of the three secondary indexes.
Database DBD for PATDB01
PATDB01 DBD:
PRINT NOGEN DBD NAME=PATDB01,ACCESS=(HIDAM,VSAM) DATASET DD1=PATDB01,DEVICE=3380,BLOCK=4096,SCAN=5 *
SEGM NAME=PATINFO,PTR=H,PARENT=0,BYTES=233 FIELD NAME=(SSN,SEQ,U),BYTES=9,START=26,TYPE=C LCHILD NAME=(SEGIX,PATDBIX),PTR=INDX FIELD NAME=SEQFIELD,BYTES=6,START=1,TYPE=C FIELD NAME=REVSEQ,BYTES=6,START=7,TYPE=C FIELD NAME=SSNALPHA,BYTES=9,START=35,TYPE=C FIELD NAME=EMPID,BYTES=12,START=44,TYPE=C FIELD NAME=LNAME,BYTES=12,START=56,TYPE=C FIELD NAME=FNAME,BYTES=12,START=68,TYPE=C FIELD NAME=ADMDATE,BYTES=8,START=89,TYPE=C FIELD NAME=PATID,BYTES=10,START=176,TYPE=C FIELD NAME=/SX1 *
LCHILD NAME=(SEGIX1,PATDBIX1),PTR=INDX XDFLD NAME=IXNAME,SRCH=(LNAME,FNAME), X SUBSEQ=/SX1,NULLVAL=BLANK *
LCHILD NAME=(SEGIX2,PATDBIX2),PTR=INDX XDFLD NAME=IXCOMP,SRCH=(SSNALPHA,EMPID,LNAME) *
LCHILD NAME=(SEGIX3,PATDBIX3),PTR=INDX XDFLD NAME=IXADMD,SRCH=(ADMDATE), X SUBSEQ=/SX1,NULLVAL=BLANK *
DBDGEN FINISH END
Primary Index DBD for PATDB01
PATDBIX DBD:
PRINT NOGEN DBD NAME=PATDBIX,ACCESS=INDEX DATASET DD1=PATDBIX,DEVICE=3380 * SEGM NAME=SEGIX,PARENT=0,BYTES=9 FIELD NAME=(SSNIX,SEQ,U),BYTES=9,START=1,TYPE=C LCHILD NAME=(PATINFO,PATDB01),INDEX=SSN DBDGEN FINISH END
Secondary Index DBDs for PATDB01
PATDBIX1 DBD:
PRINT NOGEN DBD NAME=PATDBIX1,ACCESS=INDEX DATASET DD1=PATDBIX1,DEVICE=3380 * SEGM NAME=SEGIX1,PARENT=0,BYTES=28 FIELD NAME=(IXNAMEIX,SEQ,U),BYTES=28,START=1 LCHILD NAME=(PATINFO,PATDB01),INDEX=IXNAME,PTR=SNGL DBDGEN FINISH END
PATDBIX2 DBD:
PRINT NOGEN DBD NAME=PATDBIX2,ACCESS=INDEX DATASET DD1=PATDBIX2,DEVICE=3380 * SEGM NAME=SEGIX2,PARENT=0,BYTES=33 FIELD NAME=(IXCOMPIX,SEQ,U),BYTES=33,START=1 LCHILD NAME=(PATINFO,PATDB01),INDEX=IXCOMP,PTR=SNGL DBDGEN FINISH END
PATDBIX3 DBD:
PRINT NOGEN DBD NAME=PATDBIX3,ACCESS=INDEX DATASET DD1=PATDBIX3,DEVICE=3380 * SEGM NAME=SEGIX3,PARENT=0,BYTES=12 FIELD NAME=(IXADMDIX,SEQ,U),BYTES=12,START=1 LCHILD NAME=(PATINFO,PATDB01),INDEX=IXADMD,PTR=SNGL DBDGEN FINISH END
PSB to Access PATDB01
PCB TYPE=TP,MODIFY=YES,EXPRESS=YES PCB TYPE=TP,EXPRESS=NO,MODIFY=YES,SAMETRM=YES *
PCB TYPE=DB,DBDNAME=PATDB01,PROCOPT=GO,KEYLEN=9 SENSEG NAME=PATINFO,PARENT=0 *
PCB TYPE=DB,DBDNAME=PATDB01,PROCOPT=GO,KEYLEN=28,PROCSEQ=PATDBIX1 SENSEG NAME=PATINFO,PARENT=0 *
PCB TYPE=DB,DBDNAME=PATDB01,PROCOPT=GO,KEYLEN=33,PROCSEQ=PATDBIX2 SENSEG NAME=PATINFO,PARENT=0 * PCB TYPE=DB,DBDNAME=PATDB01,PROCOPT=GO,KEYLEN=12,PROCSEQ=PATDBIX3 SENSEG NAME=PATINFO,PARENT=0 * PSBGEN LANG=COBOL,PSBNAME=TSTPSB01,CMPAT=YES END
This PSB is member TSTPSB01 in the PSB data set because PSBNAME=TSTPSB01.
PATDB01 Master File
FILENAME=PATDB01, SUFFIX=IMS , $ SEGMENT=PATINFO, SEGTYPE=S0, $ $ GROUP=PATDB01, ALIAS=E1, USAGE=A235, ACTUAL=A235, $ GROUP=PATINFO, ALIAS=E2, USAGE=A235, ACTUAL=A235, $ FIELDNAME=SEQFIELD, ALIAS=SEQFIELD.IMS, USAGE=A6, ACTUAL=A6, $ FIELDNAME=REVSEQ, ALIAS=REVSEQ.IMS, USAGE=A6, ACTUAL=A6, $ FIELDNAME=SALARY, ALIAS=E5, USAGE=A8, ACTUAL=A8, $ FIELDNAME=OT_HR_PAY, ALIAS=E6, USAGE=A5, ACTUAL=A5, $ FIELDNAME=SSN, ALIAS=SSN.KEY, USAGE=A9, ACTUAL=A9, $ FIELDNAME=SSNALPHA, ALIAS=SSNALPHA.IMS, USAGE=A9, ACTUAL=A9, $ FIELDNAME=EMPLOYEEID, ALIAS=EMPID.IMS, USAGE=A12, ACTUAL=A12, $ FIELDNAME=LAST_NAME, ALIAS=LNAME.IMS, USAGE=A12, ACTUAL=A12, $ FIELDNAME=FIRST_NAME, ALIAS=FNAME.IMS, USAGE=A12, ACTUAL=A12, $ FIELDNAME=DATE_OF_BIRTH, ALIAS=E12, USAGE=A8, ACTUAL=A8, $ FIELDNAME=RACE, ALIAS=E13, USAGE=A1, ACTUAL=A1, $ FIELDNAME=ADMIT_DATE, ALIAS=ADMDATE.IMS, USAGE=A8, ACTUAL=A8, $ FIELDNAME=ADMIT_TYPE, ALIAS=E15, USAGE=A1, ACTUAL=A1, $ FIELDNAME=DISPOSITION, ALIAS=E16, USAGE=A2, ACTUAL=A2, $ FIELDNAME=TRANSFER_DATE, ALIAS=E17, USAGE=A8, ACTUAL=A8, $ FIELDNAME=ALLERGY1, ALIAS=E18, USAGE=A15, ACTUAL=A15, $ FIELDNAME=ALLERGY2, ALIAS=E19, USAGE=A15, ACTUAL=A15, $ FIELDNAME=ALLERGY3, ALIAS=E20, USAGE=A15, ACTUAL=A15, $ FIELDNAME=ALLERGY4, ALIAS=E21, USAGE=A15, ACTUAL=A15, $ FIELDNAME=HOUSING, ALIAS=E22, USAGE=A3, ACTUAL=A3, $ FIELDNAME=RPR, ALIAS=E23, USAGE=A1, ACTUAL=A1, $ FIELDNAME=URIN, ALIAS=E24, USAGE=A1, ACTUAL=A1, $ FIELDNAME=PRACTITIONAR, ALIAS=E25, USAGE=A2, ACTUAL=A2, $ FIELDNAME=SHIFT, ALIAS=E26, USAGE=A1, ACTUAL=A1, $ FIELDNAME=PATINET_ID, ALIAS=PATID.IMS, USAGE=A10, ACTUAL=A10, $ FIELDNAME=WHO_ADDED, ALIAS=E28, USAGE=A10, ACTUAL=A10, $ FIELDNAME=DATE_ADDED, ALIAS=E29, USAGE=A8, ACTUAL=A8, $ FIELDNAME=WHO_EDITED, ALIAS=E30, USAGE=A10, ACTUAL=A10, $ FIELDNAME=DATE_EDITED, ALIAS=E31, USAGE=A8, ACTUAL=A8, $ FIELDNAME=STATION_ID, ALIAS=E32, USAGE=A12, ACTUAL=A12, $ FIELDNAME=DIABETIC, ALIAS=E33, USAGE=A1, ACTUAL=A1, $ FIELDNAME=DIALYSIS, ALIAS=E34, USAGE=A1, ACTUAL=A1, $
GROUP=IXNAME, ALIAS=IXNAME.SKY, USAGE=A24, ACTUAL=A24, $ FIELDNAME=IX_LNAME, ALIAS=LAST_NAME, USAGE=A12, ACTUAL=A12, $ FIELDNAME=IX_FNAME, ALIAS=FIRST_NAME, USAGE=A12, ACTUAL=A12, $ GROUP=IXCOMP, ALIAS=IXCOMP.SKY, USAGE=A33, ACTUAL=A33, $ FIELDNAME=IX_SSNALPHA, ALIAS=SSNALPHA, USAGE=A9, ACTUAL=A9, $ FIELDNAME=IX_EMPID, ALIAS=EMPLOYEEID, USAGE=A12, ACTUAL=A12, $ FIELDNAME=IX_LNAME1, ALIAS=LAST_NAME, USAGE=A12, ACTUAL=A12, $ GROUP=IXADMD, ALIAS=IXADMD.SKY, USAGE=A8, ACTUAL=A8, $ FIELDNAME=IX_ADMDATE, ALIAS=ADMIT_DATE, USAGE=A8, ACTUAL=A8, $ SEGMENT=SEG2, SEGTYPE=U, PARENT=PATINFO, OCCURS=1, POSITION=SSNALPHA, $ GROUP=SSNN, ALIAS=E35, USAGE=A9, ACTUAL=A9, $ GROUP=SSNUMERIC, ALIAS=E36, USAGE=A9, ACTUAL=A9, $ FIELDNAME=N1_3, ALIAS=E37, USAGE=A3, ACTUAL=A3, $ FIELDNAME=N4_5, ALIAS=E38, USAGE=A2, ACTUAL=A2, $ FIELDNAME=N6_9, ALIAS=E39, USAGE=A4, ACTUAL=A4, $
PATDB01 Access File
PSB=PATDBPSB, WRITE=NO, PCBNUMBER=4, PL1=NO, $ SEGNAME=PATINFO, KEYTYPE=S0, $ XDFLD=IXNAME, SRCH=LAST_NAME/FIRST_NAME, ALTPCBNUMBER=5, $ XDFLD=IXCOMP, SRCH=SSNALPHA/EMPLOYEEID/LAST_NAME, ALTPCBNUMBER=6, $ XDFLD=IXADMD, SRCH=ADMIT_DATE, ALTPCBNUMBER=7, $
How to: |
IMS limits the size of its data sources. A site that needs a larger data source may be able to create several smaller data sources by partitioning the large data source based on root key values.
Using extended Access File attributes, you can describe a partition to the server, describe how to concatenate the parts, and assign a name to the concatenated PCB. When you issue a request, you can report from the concatenated PCB name or from any of the individual partitions, depending on the file name you reference in the request.
A partition assigns each record to a specific data source depending on its root key value. The first partition contains records with the lowest key values. The next partition contains records with higher key values, and so on. The last partition contains records with the highest key values. Each partition is a separate IMS data source and, therefore, has a separate PCB in the PSB.
To describe the key range in each partition to the server, add the LOWVALUE and HIGHVALUE attributes to the appropriate PCB records in the Access File.
PCBNAME=mfdname,PCBTYPE=DB,LOWVALUE={value1|0},HIGHVALUE={value2|FF},$
where:
Is the name of the Master File for one partition of the large data source. Since the partition is a separate data source with its own DBD, it needs its own PCB and Master File.
Is the lowest key value, in alphanumeric format, in the partition accessed with Master File mfdname. 0 is the default value.
Is the highest key value, in alphanumeric format, in the partition accessed with Master File mfdname. Hexadecimal FF is the default value.
Note:
If the partitioning field is a group composed of multiple subfields, each subfield value must be alphanumeric, and you must specify the concatenated subfield values in the LOWVALUE and HIGHVALUE attributes. For example, if the root key low value is composed of F1=AAAA, F2=88, and F3=BBB, then LOWVALUE=AAAA88BBB.
In an Access File, you can concatenate individual PCBs by assigning a name to the concatenation and issuing a request against it.
The PCBs that you concatenate do not have to be partitioned, that is, their Access File records do not have to include the LOWVALUE and HIGHVALUE attributes. However, if they do include the partitioning information, the adapter can examine the request and determine which PCBs satisfy the request. Without the partitioning information, the adapter must access every PCB that participates in the concatenation.
The format of the Access File for the Adapter for IMS to provide extended support for concatenated databases is as follows:
For example:
CONCATPCB=4,LOWVALUE=0,HIGHVALUE=0, $ CONCATPCB=6,LOWVALUE=1,HIGHVALUE=1, $ ................................................................. CONCATPCB=12,LOWVALUE=9,HIGHVALUE=9, $
The key value is converted to alphanumeric format prior to the substring operation.The key format is taken from the ACTUAL description. A Packed or Zoned format number is processed as an unsigned one.
Conversion rules for the Packed format:
Conversion rules for the Integer format:
For example:
CONCPOSITION=1,LENGTH=1, $
FILENAME=HDAM0, SUFFIX=IMS , $ SEGMENT=LANGUAGE, SEGTYPE=S0, $ FIELDNAME=EMPL6, ALIAS=EMPL6.HKY, USAGE=P8, ACTUAL=P4, $ FIELDNAME=LANG6, ALIAS=LANG6.IMS, USAGE=A15, ACTUAL=A15, $
PSB=PIHDPSB,PCBNUMBER= 4,PL1=NO,WRITE=NO,$ SEGNAME=LANGUAGE, KEYTYPE=S1 ,$ CONCATPCB=4,LOWVALUE=1,HIGHVALUE=1, $ CONCATPCB=6,LOWVALUE=2,HIGHVALUE=2, $ CONCATPCB=8,LOWVALUE=3,HIGHVALUE=3, $ CONCPOSITION=4,LENGTH=1, $
Note: PCBNUMBER in the PSB statement refers to the PCB associated with the root segment.
In the following request, we associate the 5th digit in the key (offset 4 in the key buffer) with the PCB to schedule.:
TABLE FILE HDAM0 PRINT * WHERE EMPL6 EQ 9336 END
PCB number 8 will be used for the numeric qualifier 9336. The extracted value is 3 (since packed number 9336 is unpacked to the 7 bytes buffer and the result value is 0009336).
EMPDB01, EMPDB02, and EMPDB03 are HIDAM data sources that illustrate partitioning and concatenation of PCBs in the Access File. The following topics illustrate:
Data source DBD:
PRINT NOGEN DBD NAME=EMPDB01,ACCESS=(HIDAM,VSAM) DATASET DD1=EMPDB01,DEVICE=3380,BLOCK=4096,SCAN=5 * SEGM NAME=EMPINFO,PTR=H,PARENT=0,BYTES=212 FIELD NAME=(SSNALPHA,SEQ,U),BYTES=9,START=18,TYPE=C LCHILD NAME=(SEGIX1,EMPDBIX1),PTR=INDX FIELD NAME=SEQFIELD,BYTES=2,START=1,TYPE=P FIELD NAME=REVSEQ,BYTES=6,START=3,TYPE=C FIELD NAME=SSN,BYTES=3,START=15,TYPE=P FIELD NAME=EMPID,BYTES=12,START=27,TYPE=C FIELD NAME=LNAME,BYTES=12,START=39,TYPE=C FIELD NAME=FNAME,BYTES=12,START=51,TYPE=C FIELD NAME=ADMDATE,BYTES=8,START=72,TYPE=C * DBDGEN FINISH END
Index DBD:
PRINT NOGEN DBD NAME=EMPDBIX1,ACCESS=INDEX DATASET DD1=EMPDBIX1,DEVICE=3380 * SEGM NAME=SEGIX1,PARENT=0,BYTES=9 FIELD NAME=(SSNIX,SEQ,U),BYTES=9,START=1 LCHILD NAME=(EMPINFO,EMPDB01),INDEX=SSNALPHA DBDGEN FINISH END
Database DBD:
PRINT NOGEN DBD NAME=EMPDB02,ACCESS=(HIDAM,VSAM) DATASET DD1=EMPDB02,DEVICE=3380,BLOCK=4096,SCAN=5 * SEGM NAME=EMPINFO,PTR=H,PARENT=0,BYTES=212 FIELD NAME=(SSNALPHA,SEQ,U),BYTES=9,START=18,TYPE=C LCHILD NAME=(SEGIX2,EMPDBIX2),PTR=INDX FIELD NAME=SEQFIELD,BYTES=2,START=1,TYPE=P FIELD NAME=REVSEQ,BYTES=6,START=3,TYPE=C FIELD NAME=SSN,BYTES=3,START=15,TYPE=P FIELD NAME=EMPID,BYTES=12,START=27,TYPE=C FIELD NAME=LNAME,BYTES=12,START=39,TYPE=C FIELD NAME=FNAME,BYTES=12,START=51,TYPE=C FIELD NAME=ADMDATE,BYTES=8,START=72,TYPE=C * DBDGEN FINISH END
Index DBD:
PRINT NOGEN DBD NAME=EMPDBIX2,ACCESS=INDEX DATASET DD1=EMPDBIX2,DEVICE=3380 * SEGM NAME=SEGIX2,PARENT=0,BYTES=9 FIELD NAME=(SSNIX,SEQ,U),BYTES=9,START=1 LCHILD NAME=(EMPINFO,EMPDB02),INDEX=SSNALPHA DBDGEN FINISH END
Database DBD:
PRINT NOGEN DBD NAME=EMPDB03,ACCESS=(HIDAM,VSAM) DATASET DD1=EMPDB03,DEVICE=3380,BLOCK=4096,SCAN=5 * SEGM NAME=EMPINFO,PTR=H,PARENT=0,BYTES=212 FIELD NAME=(SSNALPHA,SEQ,U),BYTES=9,START=18,TYPE=C LCHILD NAME=(SEGIX3,EMPDBIX3),PTR=INDX FIELD NAME=SEQFIELD,BYTES=2,START=1,TYPE=P FIELD NAME=REVSEQ,BYTES=6,START=3,TYPE=C FIELD NAME=SSN,BYTES=3,START=15,TYPE=P FIELD NAME=EMPID,BYTES=12,START=27,TYPE=C FIELD NAME=LNAME,BYTES=12,START=39,TYPE=C FIELD NAME=FNAME,BYTES=12,START=51,TYPE=C FIELD NAME=ADMDATE,BYTES=8,START=72,TYPE=C * DBDGEN FINISH END
Index DBD:
PRINT NOGEN DBD NAME=EMPDBIX3,ACCESS=INDEX DATASET DD1=EMPDBIX3,DEVICE=3380 * SEGM NAME=SEGIX3,PARENT=0,BYTES=9 FIELD NAME=(SSNIX,SEQ,U),BYTES=9,START=1 LCHILD NAME=(EMPINFO,EMPDB03),INDEX=SSNALPHA DBDGEN FINISH END
PCB TYPE=TP,MODIFY=YES,EXPRESS=YES PCB TYPE=TP,EXPRESS=NO,MODIFY=YES,SAMETRM=YES PCB TYPE=DB,DBDNAME=EMPDB01,PROCOPT=GO,KEYLEN=9 SENSEG NAME=EMPINFO,PARENT=0 PCB TYPE=DB,DBDNAME=EMPDB02,PROCOPT=GO,KEYLEN=9 SENSEG NAME=EMPINFO,PARENT=0 PCB TYPE=DB,DBDNAME=EMPDB03,PROCOPT=GO,KEYLEN=9 SENSEG NAME=EMPINFO,PARENT=0 PSBGEN LANG=COBOL,PSBNAME=EMPPSBJ,CMPAT=YES END
The EMPDB01, EMPDB02, and EMPDB03 Master Files each correspond to a PCB for one individual partition of the data source. The EMPDBJ Master File corresponds to the concatenation of the three partitions.
FILE=EMPDB01,SUFFIX=IMS,$ SEGNAME=EMPINFO,PARENT=,SEGTYPE=S0,$ FIELD=SEQFIELD ,ALIAS=SEQFIELD.IMS ,USAGE=P6 ,ACTUAL=P2 ,$ FIELD=REVSEQ ,ALIAS=REVSEQ.IMS ,USAGE=A6 ,ACTUAL=A6 ,$ FIELD=SALARY ,ALIAS= ,USAGE=P8 ,ACTUAL=P4 ,$ FIELD=OT_HR_PAY ,ALIAS= ,USAGE=P5 ,ACTUAL=P2 ,$ FIELD=SSN ,ALIAS=SSN.IMS ,USAGE=P9 ,ACTUAL=P3 ,$ FIELD=SSNALPHA ,ALIAS=SSNALPHA.KEY ,USAGE=A9 ,ACTUAL=A9 ,$ FIELD=EMPID ,ALIAS=EMPID.IMS ,USAGE=A12 ,ACTUAL=A12,$ FIELD=ELAST_NAME ,ALIAS=ELNAME.IMS ,USAGE=A12 ,ACTUAL=A12,$ FIELD=EFIRST_NAME ,ALIAS=EFNAME.IMS ,USAGE=A12 ,ACTUAL=A12,$ FIELD=DATE_OF_BIRTH ,ALIAS= ,USAGE=A08 ,ACTUAL=A08,$ FIELD=RACE ,ALIAS= ,USAGE=A01 ,ACTUAL=A01,$ FIELD=ADMIT_DATE ,ALIAS=ADMDATE.IMS ,USAGE=A08 ,ACTUAL=A08,$ FIELD=ADMIT_TYPE ,ALIAS= ,USAGE=A01 ,ACTUAL=A01,$ FIELD=DISPOSITION ,ALIAS= ,USAGE=A02 ,ACTUAL=A02,$ FIELD=TRANSFER_DATE ,ALIAS= ,USAGE=A08 ,ACTUAL=A08,$ FIELD=ALLERGY1 ,ALIAS= ,USAGE=A15 ,ACTUAL=A15,$ FIELD=ALLERGY2 ,ALIAS= ,USAGE=A15 ,ACTUAL=A15,$ FIELD=ALLERGY3 ,ALIAS= ,USAGE=A15 ,ACTUAL=A15,$ FIELD=ALLERGY4 ,ALIAS= ,USAGE=A15 ,ACTUAL=A15,$ FIELD=HOUSING ,ALIAS= ,USAGE=A03 ,ACTUAL=A03,$ FIELD=RPR ,ALIAS= ,USAGE=A01 ,ACTUAL=A01,$ FIELD=URIN ,ALIAS= ,USAGE=A01 ,ACTUAL=A01,$ FIELD=PRACTITIONAR ,ALIAS= ,USAGE=A02 ,ACTUAL=A02,$ FIELD=SHIFT ,ALIAS= ,USAGE=A01 ,ACTUAL=A01,$ FIELD=PATINET_ID ,ALIAS= ,USAGE=P12 ,ACTUAL=P4 ,$ FIELD=WHO_ADDED ,ALIAS= ,USAGE=A10 ,ACTUAL=A10,$ FIELD=DATE_ADDED ,ALIAS= ,USAGE=A08 ,ACTUAL=A08,$ FIELD=WHO_EDITED ,ALIAS= ,USAGE=A10 ,ACTUAL=A10,$ FIELD=DATE_EDITED ,ALIAS= ,USAGE=A08 ,ACTUAL=A08,$ FIELD=STATION_ID ,ALIAS= ,USAGE=A12 ,ACTUAL=A12,$ FIELD=DIABETIC ,ALIAS= ,USAGE=A01 ,ACTUAL=A01,$ FIELD=DIALYSIS ,ALIAS= ,USAGE=A01 ,ACTUAL=A01,$
FILE=EMPDB02,SUFFIX=IMS,$ SEGNAME=EMPINFO,PARENT=,SEGTYPE=S0,$ FIELD=SEQFIELD ,ALIAS=SEQFIELD.IMS ,USAGE=P6 ,ACTUAL=P2 ,$ FIELD=REVSEQ ,ALIAS=REVSEQ.IMS ,USAGE=A6 ,ACTUAL=A6 ,$ FIELD=SALARY ,ALIAS= ,USAGE=P8 ,ACTUAL=P4 ,$ FIELD=OT_HR_PAY ,ALIAS= ,USAGE=P5 ,ACTUAL=P2 ,$ FIELD=SSN ,ALIAS=SSN.IMS ,USAGE=P9 ,ACTUAL=P3 ,$ FIELD=SSNALPHA ,ALIAS=SSNALPHA.KEY ,USAGE=A9 ,ACTUAL=A9 ,$ FIELD=EMPID ,ALIAS=EMPID.IMS ,USAGE=A12 ,ACTUAL=A12,$ FIELD=ELAST_NAME ,ALIAS=ELNAME.IMS ,USAGE=A12 ,ACTUAL=A12,$ FIELD=EFIRST_NAME ,ALIAS=EFNAME.IMS ,USAGE=A12 ,ACTUAL=A12,$ FIELD=DATE_OF_BIRTH ,ALIAS= ,USAGE=A08 ,ACTUAL=A08,$ FIELD=RACE ,ALIAS= ,USAGE=A01 ,ACTUAL=A01,$ FIELD=ADMIT_DATE ,ALIAS=ADMDATE.IMS ,USAGE=A08 ,ACTUAL=A08,$ FIELD=ADMIT_TYPE ,ALIAS= ,USAGE=A01 ,ACTUAL=A01,$ FIELD=DISPOSITION ,ALIAS= ,USAGE=A02 ,ACTUAL=A02,$ FIELD=TRANSFER_DATE ,ALIAS= ,USAGE=A08 ,ACTUAL=A08,$ FIELD=ALLERGY1 ,ALIAS= ,USAGE=A15 ,ACTUAL=A15,$ FIELD=ALLERGY2 ,ALIAS= ,USAGE=A15 ,ACTUAL=A15,$ FIELD=ALLERGY3 ,ALIAS= ,USAGE=A15 ,ACTUAL=A15,$ FIELD=ALLERGY4 ,ALIAS= ,USAGE=A15 ,ACTUAL=A15,$ FIELD=HOUSING ,ALIAS= ,USAGE=A03 ,ACTUAL=A03,$ FIELD=RPR ,ALIAS= ,USAGE=A01 ,ACTUAL=A01,$ FIELD=URIN ,ALIAS= ,USAGE=A01 ,ACTUAL=A01,$ FIELD=PRACTITIONAR ,ALIAS= ,USAGE=A02 ,ACTUAL=A02,$ FIELD=SHIFT ,ALIAS= ,USAGE=A01 ,ACTUAL=A01,$ FIELD=PATINET_ID ,ALIAS= ,USAGE=P12 ,ACTUAL=P4 ,$ FIELD=WHO_ADDED ,ALIAS= ,USAGE=A10 ,ACTUAL=A10,$ FIELD=DATE_ADDED ,ALIAS= ,USAGE=A08 ,ACTUAL=A08,$ FIELD=WHO_EDITED ,ALIAS= ,USAGE=A10 ,ACTUAL=A10,$ FIELD=DATE_EDITED ,ALIAS= ,USAGE=A08 ,ACTUAL=A08,$ FIELD=STATION_ID ,ALIAS= ,USAGE=A12 ,ACTUAL=A12,$ FIELD=DIABETIC ,ALIAS= ,USAGE=A01 ,ACTUAL=A01,$ FIELD=DIALYSIS ,ALIAS= ,USAGE=A01 ,ACTUAL=A01,$
FILE=EMPDB03,SUFFIX=IMS,$ SEGNAME=EMPINFO,PARENT=,SEGTYPE=S0,$ FIELD=SEQFIELD ,ALIAS=SEQFIELD.IMS ,USAGE=P6 ,ACTUAL=P2 ,$ FIELD=REVSEQ ,ALIAS=REVSEQ.IMS ,USAGE=A6 ,ACTUAL=A6 ,$ FIELD=SALARY ,ALIAS= ,USAGE=P8 ,ACTUAL=P4 ,$ FIELD=OT_HR_PAY ,ALIAS= ,USAGE=P5 ,ACTUAL=P2 ,$ FIELD=SSN ,ALIAS=SSN.IMS ,USAGE=P9 ,ACTUAL=P3 ,$ FIELD=SSNALPHA ,ALIAS=SSNALPHA.KEY ,USAGE=A9 ,ACTUAL=A9 ,$ FIELD=EMPID ,ALIAS=EMPID.IMS ,USAGE=A12 ,ACTUAL=A12,$ FIELD=ELAST_NAME ,ALIAS=ELNAME.IMS ,USAGE=A12 ,ACTUAL=A12,$ FIELD=EFIRST_NAME ,ALIAS=EFNAME.IMS ,USAGE=A12 ,ACTUAL=A12,$ FIELD=DATE_OF_BIRTH ,ALIAS= ,USAGE=A08 ,ACTUAL=A08,$ FIELD=RACE ,ALIAS= ,USAGE=A01 ,ACTUAL=A01,$ FIELD=ADMIT_DATE ,ALIAS=ADMDATE.IMS ,USAGE=A08 ,ACTUAL=A08,$ FIELD=ADMIT_TYPE ,ALIAS= ,USAGE=A01 ,ACTUAL=A01,$ FIELD=DISPOSITION ,ALIAS= ,USAGE=A02 ,ACTUAL=A02,$ FIELD=TRANSFER_DATE ,ALIAS= ,USAGE=A08 ,ACTUAL=A08,$ FIELD=ALLERGY1 ,ALIAS= ,USAGE=A15 ,ACTUAL=A15,$ FIELD=ALLERGY2 ,ALIAS= ,USAGE=A15 ,ACTUAL=A15,$ FIELD=ALLERGY3 ,ALIAS= ,USAGE=A15 ,ACTUAL=A15,$ FIELD=ALLERGY4 ,ALIAS= ,USAGE=A15 ,ACTUAL=A15,$ FIELD=HOUSING ,ALIAS= ,USAGE=A03 ,ACTUAL=A03,$ FIELD=RPR ,ALIAS= ,USAGE=A01 ,ACTUAL=A01,$ FIELD=URIN ,ALIAS= ,USAGE=A01 ,ACTUAL=A01,$ FIELD=PRACTITIONAR ,ALIAS= ,USAGE=A02 ,ACTUAL=A02,$ FIELD=SHIFT ,ALIAS= ,USAGE=A01 ,ACTUAL=A01,$ FIELD=PATINET_ID ,ALIAS= ,USAGE=P12 ,ACTUAL=P4 ,$ FIELD=WHO_ADDED ,ALIAS= ,USAGE=A10 ,ACTUAL=A10,$ FIELD=DATE_ADDED ,ALIAS= ,USAGE=A08 ,ACTUAL=A08,$ FIELD=WHO_EDITED ,ALIAS= ,USAGE=A10 ,ACTUAL=A10,$ FIELD=DATE_EDITED ,ALIAS= ,USAGE=A08 ,ACTUAL=A08,$ FIELD=STATION_ID ,ALIAS= ,USAGE=A12 ,ACTUAL=A12,$ FIELD=DIABETIC ,ALIAS= ,USAGE=A01 ,ACTUAL=A01,$ FIELD=DIALYSIS ,ALIAS= ,USAGE=A01 ,ACTUAL=A01,$
FILE=EMPDBJ,SUFFIX=IMS,$ SEGNAME=EMPINFO,PARENT=,SEGTYPE=S0,$ FIELD=SEQFIELD ,ALIAS=SEQFIELD.IMS ,USAGE=P6 ,ACTUAL=P2 ,$ FIELD=REVSEQ ,ALIAS=REVSEQ.IMS ,USAGE=A6 ,ACTUAL=A6 ,$ FIELD=SALARY ,ALIAS= ,USAGE=P8 ,ACTUAL=P4 ,$ FIELD=OT_HR_PAY ,ALIAS= ,USAGE=P5 ,ACTUAL=P2 ,$ FIELD=SSN ,ALIAS=SSN.IMS ,USAGE=P9 ,ACTUAL=P3 ,$ FIELD=SSNALPHA ,ALIAS=SSNALPHA.KEY ,USAGE=A9 ,ACTUAL=A9 ,$ FIELD=EMPID ,ALIAS=EMPID.IMS ,USAGE=A12 ,ACTUAL=A12,$ FIELD=ELAST_NAME ,ALIAS=ELNAME.IMS ,USAGE=A12 ,ACTUAL=A12,$ FIELD=EFIRST_NAME ,ALIAS=EFNAME.IMS ,USAGE=A12 ,ACTUAL=A12,$ FIELD=DATE_OF_BIRTH ,ALIAS= ,USAGE=A08 ,ACTUAL=A08,$ FIELD=RACE ,ALIAS= ,USAGE=A01 ,ACTUAL=A01,$ FIELD=ADMIT_DATE ,ALIAS=ADMDATE.IMS ,USAGE=A08 ,ACTUAL=A08,$ FIELD=ADMIT_TYPE ,ALIAS= ,USAGE=A01 ,ACTUAL=A01,$ FIELD=DISPOSITION ,ALIAS= ,USAGE=A02 ,ACTUAL=A02,$ FIELD=TRANSFER_DATE ,ALIAS= ,USAGE=A08 ,ACTUAL=A08,$ FIELD=ALLERGY1 ,ALIAS= ,USAGE=A15 ,ACTUAL=A15,$ FIELD=ALLERGY2 ,ALIAS= ,USAGE=A15 ,ACTUAL=A15,$ FIELD=ALLERGY3 ,ALIAS= ,USAGE=A15 ,ACTUAL=A15,$ FIELD=ALLERGY4 ,ALIAS= ,USAGE=A15 ,ACTUAL=A15,$ FIELD=HOUSING ,ALIAS= ,USAGE=A03 ,ACTUAL=A03,$ FIELD=RPR ,ALIAS= ,USAGE=A01 ,ACTUAL=A01,$ FIELD=URIN ,ALIAS= ,USAGE=A01 ,ACTUAL=A01,$ FIELD=PRACTITIONAR ,ALIAS= ,USAGE=A02 ,ACTUAL=A02,$ FIELD=SHIFT ,ALIAS= ,USAGE=A01 ,ACTUAL=A01,$ FIELD=PATINET_ID ,ALIAS= ,USAGE=P12 ,ACTUAL=P4 ,$ FIELD=WHO_ADDED ,ALIAS= ,USAGE=A10 ,ACTUAL=A10,$ FIELD=DATE_ADDED ,ALIAS= ,USAGE=A08 ,ACTUAL=A08,$ FIELD=WHO_EDITED ,ALIAS= ,USAGE=A10 ,ACTUAL=A10,$ FIELD=DATE_EDITED ,ALIAS= ,USAGE=A08 ,ACTUAL=A08,$ FIELD=STATION_ID ,ALIAS= ,USAGE=A12 ,ACTUAL=A12,$ FIELD=DIABETIC ,ALIAS= ,USAGE=A01 ,ACTUAL=A01,$ FIELD=DIALYSIS ,ALIAS= ,USAGE=A01 ,ACTUAL=A01,$
The following example illustrates how to concatenate partitioned PCBs:
PSB=EMPPSBJ, WRITE=NO, PCBNUMBER=4, PL1=NO, $ SEGNAME=EMPINFO, KEYTYPE=S2, $ PSB=EMPPSBJ, WRITE=NO, PCBNUMBER=5, PL1=NO, $ PSB=EMPPSBJ, WRITE=NO, PCBNUMBER=6, PL1=NO, $ CONCATPCB=4, LOWVALUE=000000001, HIGHVALUE=000001667, $ CONCATPCB=5, LOWVALUE=000001668, HIGHVALUE=000003334, $ CONCATPCB=6, LOWVALUE=000003335, HIGHVALUE=000005000, $
Consider the following request. (The key field is named SSNALPHA):
SELECT SSNALPHA ... FROM EMPDBJ WHERE SSNALPHA = '000001775';
The adapter satisfies the request using the EMPDB02 PCB only. If the WHERE clause had requested key values less than 000001775 (rather than equal to 000001775), the adapter would have used the EMPDB01 and EMPDB02 PCBs.
Note:
Information Builders |