DSN8IP8
ROUTER FOR SECONDARY SELECTION AND/OR DETAIL PROCESSIN CALLS SECONDARY SELECTION MODULES DSN8MPM CALLS DETAIL MODULES DSN8MPT DSN8MPV DSN8MPW DSN8MPX DSN8MPZ CALLED BY DSN8IP7 (SQL1) .
DSN8IP8: PROC(COMMPTR) ; 00010000
%PAGE; 00020000
/********************************************************************* 00030000
* * 00040000
* MODULE NAME = DSN8IP8 * 00050000
* * 00060000
* DESCRIPTIVE NAME = DB2 SAMPLE APPLICATION * 00070000
* SQL 2 COMMON MODULE * 00080000
* IMS * 00090000
* PL/I * 00100000
* PROJECT * 00110000
* * 00120000
* LICENSED MATERIALS - PROPERTY OF IBM * 00130000
* 5695-DB2 * 00136000
* (C) COPYRIGHT 1982, 1995 IBM CORP. ALL RIGHTS RESERVED. * 00143000
* * 00150000
* STATUS = VERSION 4 * 00160000
* * 00170000
* FUNCTION = ROUTER FOR SECONDARY SELECTION AND/OR DETAIL PROCESSIN* 00180000
* CALLS SECONDARY SELECTION MODULES * 00190000
* DSN8MPM * 00200000
* CALLS DETAIL MODULES * 00210000
* DSN8MPT DSN8MPV DSN8MPW DSN8MPX DSN8MPZ * 00220000
* CALLED BY DSN8IP7 (SQL1) * 00230000
* * 00240000
* NOTES = NONE * 00250000
* * 00260000
* MODULE TYPE = BLOCK OF PL/I CODE * 00270000
* PROCESSOR = DB2 PRECOMPILER, PL/I OPTIMIZER * 00280000
* MODULE SIZE = SEE LINKEDIT * 00290000
* ATTRIBUTES = REUSABLE * 00300000
* * 00310000
* ENTRY POINT = DSN8IP8 * 00320000
* PURPOSE = SEE FUNCTION * 00330000
* LINKAGE = NONE * 00340000
* INPUT = * 00350000
* SYMBOLIC LABEL/NAME = COMMPTR * 00360000
* DESCRIPTION = POINTER TO COMMAREA * 00370000
* * 00380000
* OUTPUT = * 00390000
* SYMBOLIC LABEL/NAME = COMMPTR * 00400000
* DESCRIPTION = POINTER TO COMMAREA * 00410000
* * 00420000
* EXIT-NORMAL = * 00430000
* * 00440000
* EXIT-ERROR = IF SQLERROR OR SQLWARNING, SQL WHENEVER CONDITION * 00450000
* SPECIFIED IN DSN8IP8 WILL BE RAISED AND PROGRAM * 00460000
* WILL GO TO THE LABEL DB_ERROR. * 00470000
* * 00480000
* * 00490000
* RETURN CODE = NONE * 00500000
* * 00510000
* ABEND CODES = NONE * 00520000
* * 00530000
* ERROR-MESSAGES = * 00540000
* DSN8062E-AN OBJECT WAS NOT SELECTED * 00550000
* DSN8066E-UNSUPPORTED PFK OR LOGIC ERROR * 00570000
* DSN8072E-INVALID SELECTION ON SECONDARY SCREEN * 00580000
* * 00590000
* EXTERNAL REFERENCES = NONE * 00600000
* ROUTINES/SERVICES = 8 MODULES LISTED ABOVE * 00610000
* DSN8MPG - ERROR MESSAGE ROUTINE * 00620000
* * 00630000
* DATA-AREAS = * 00640000
* DSN8MPAC - DCLGEN FOR ACTIVITY TYPES * 00650000
* DSN8MPAS - CURSOR SECONDARY SELECTION FOR * 00660000
* STAFF * 00670000
* DSN8MPCA - COMMUNICATION AREA BETWEEN MODULES * 00680000
* DSN8MPDH - CURSOR FOR DISPLAY TEXT FROM * 00690000
* TDSPTXT TABLE * 00700000
* DSN8MPDP - DCLGEN FOR DEPARTMENT * 00710000
* DSN8MPDT - DCLGEN FOR DISPLAY TEXT TABLE * 00720000
* DSN8MPEM - DCLGEN FOR EMPLOYEE * 00730000
* DSN8MPEP - DCLGEN FOR PROJECT/STAFFING * 00740000
* DSN8MPES - CURSOR SECONDARY SELECTION FOR * 00750000
* ESTIMATES * 00760000
* DSN8MPOV - DCLGEN FOR OPTION VALIDATION * 00770000
* DSN8MPPA - DCLGEN FOR PROJECT/ACTIVITIES * 00780000
* DSN8MPPD - DCLGEN FOR PROJ STRUCTURE DETAIL * 00790000
* DSN8MPP2 - DCLGEN FOR PROJ STRUCTURE DETAIL * 00795000
* DSN8MPPE - CURSOR PROJECT DETAIL * 00800000
* DSN8MPPJ - DCLGEN FOR PROJECTS * 00810000
* DSN8MPPL - CURSOR PROJECT LIST * 00820000
* DSN8MPPR - DCLGEN FOR PROJ/RESP EMPLOYEE * 00830000
* DSN8MPSA - DCLGEN FOR PROJ ACTIVITY LISTING * 00850000
* DSN8MPFP - DCLGEN FOR PROJECT-EMPLOYEE * 00855000
* DSN8MPED - DCLGEN FOR EMPLOYEE-DEPT * 00857000
* DSN8MPSL - CURSOR STAFFING LIST * 00860000
* DSN8MPS2 - DCLGEN FOR PROJ ACTIVITY LISTING * 00870000
* DSN8MPM - SECONDARY SELECTION FOR PROJECTS * 00880000
* DSN8MPT - PROJECT ACTIVITY LIST * 00890000
* DSN8MPV - PROJECT STRUCTURE DETAIL * 00900000
* DSN8MPW - ACTIVITY STAFFING DETAIL * 00910000
* DSN8MPX - ACTIVITY ESTIMATE DETAIL * 00920000
* DSN8MPZ - PROJECT DETAIL * 00930000
* * 00940000
* CONTROL-BLOCKS = * 00950000
* SQLCA - SQL COMMUNICATION AREA * 00960000
* * 00970000
* TABLES = NONE 00980000
* * 00990000
* CHANGE-ACTIVITY = NONE * 01000000
* * 01010000
* * 01020000
* *PSEUDOCODE* * 01030000
* * 01040000
* THIS MODULE DETERMINES WHICH SECONDARY SELECTION AND/OR * 01050000
* DETAIL MODULE(S) ARE TO BE CALLED IN THE IMS/PL/I * 01060000
* ENVIRONMENT. * 01070000
* * 01080000
* WHAT HAS HAPPENED SO FAR?.............THE SUBSYSTEM * 01090000
* DEPENDENT MODULE (IMS,CICS,TSO) OR (SQL 0) HAS * 01100000
* READ THE INPUT SCREEN, FORMATTED THE INPUT AND PASSED CONTROL * 01110000
* TO SQL 1. SQL 1 PERFORMS VALIDATION ON THE SYSTEM DEPENDENT * 01120000
* FIELDS (MAJOR SYSTEM, ACTION, OBJECT, SEARCH CRITERIA). IF * 01130000
* ALL SYSTEM FIELDS ARE VALID SQL 1 PASSED CONTROL TO THIS * 01140000
* MODULE. PASSED PARAMETERS CONSIST ONLY OF A POINTER WHICH * 01150000
* POINTS TO A COMMUNICATION CONTROL AREA USED TO COMMUNICATE * 01160000
* BETWEEN SQL 0 , SQL 1, SQL 2 AND THE SECONDARY SELECTION * 01170000
* AND DETAIL MODULES. * 01180000
* * 01190000
* WHAT IS 'INCLUDED' IN THIS MODULE?............. * 01200000
* ALL SECONDARY SELECTION AND DETAIL MODULES ARE 'INCLUDED'. * 01210000
* ALL VARIABLES KNOWN IN THIS PROCEDURE ARE KNOWN IN THE * 01220000
* SUB PROCEDURES. ALL SQL CURSOR DEFINITIONS AND * 01230000
* SQL 'INCLUDES' ARE DONE IN THIS PROCEDURE. BECAUSE OF THE * 01240000
* RESTRICTION THAT CURSOR HOST VARIABLES MUST BE DECLARED BEFORE* 01250000
* THE CURSOR DEFINITION ALL CURSOR HOST VARIABLES ARE DECLARED * 01260000
* IN THIS PROCEDURE. * 01270000
* * 01280000
* PROCEDURE * 01290000
* IF ANSWER TO DETAIL SCREEN & DETAIL PROCESSOR * 01300000
* IS NOT WILLING TO ACCEPT AN ANSWER THEN * 01310000
* NEW REQUEST* * 01320000
* * 01330000
* ELSE * 01340000
* IF ANSWER TO A SECONDARY SELECTION THEN * 01350000
* DETERMINE IF NEW REQUEST. * 01360000
* * 01370000
* CASE (NEW REQUEST) * 01380000
* * 01390000
* SUBCASE ('ADD') * 01400000
* DETAIL PROCESSOR * 01410000
* RETURN TO SQL 1 * 01420000
* ENDSUB * 01430000
* * 01440000
* SUBCASE ('DISPLAY','ERASE','UPDATE') * 01450000
* CALL SECONDARY SELECTION * 01460000
* IF # OF POSSIBLE CHOICES IS ^= 1 THEN * 01470000
* RETURN TO SQL 1 * 01480000
* ELSE * 01490000
* CALL THE DETAIL PROCESSOR * 01500000
* RETURN TO SQL 1 * 01510000
* ENDSUB * 01520000
* * 01530000
* ENDCASE * 01540000
* * 01550000
* IF ANSWER TO SECONDARY SELECTION AND A SELECTION HAS * 01560000
* ACTUALLY BEEN MADE THEN * 01570000
* VALID SELECTION #? * 01580000
* IF IT IS VALID THEN * 01590000
* CALL DETAIL PROCESSOR * 01600000
* RETURN TO SQL 1 * 01610000
* ELSE * 01620000
* PRINT ERROR MSG * 01630000
* RETURN TO SQL 1. * 01640000
* * 01650000
* IF ANSWER TO SECONDARY SELECTION THEN * 01660000
* CALL SECONDARY SELECTION * 01670000
* RETURN TO SQL 1. * 01680000
* * 01690000
* IF ANSWER TO DETAIL THEN * 01700000
* CALL DETAIL PROCESSOR * 01710000
* RETURN TO SQL 1. * 01720000
* * 01730000
* END. * 01740000
* * 01750000
* *EXAMPLE- A ROW IS SUCCESSFULLY ADDED, THE OPERATOR RECEIVES* 01760000
* THE SUCCESSFULLY ADDED MESSAGE AND JUST HITS ENTER. * 01770000
* * 01780000
* END. * 01790000
*-------------------------------------------------------------------*/ 01800000
/* INCLUDE DECLARES */ 01810000
EXEC SQL INCLUDE DSN8MPCA; /*COMMUNICATION AREA BETWEEN MODULES */ 01820000
EXEC SQL INCLUDE SQLCA; /*SQL COMMUNICATION AREA */ 01830000
/* PROJECTS */ 01840000
EXEC SQL INCLUDE DSN8MPDP; /* DCLGEN FOR DEPARTMENT */ 01850000
EXEC SQL INCLUDE DSN8MPEM; /* DCLGEN FOR EMPLOYEE */ 01860000
EXEC SQL INCLUDE DSN8MPPJ; /* DCLGEN FOR PROJECTS */ 01870000
EXEC SQL INCLUDE DSN8MPAC; /* DCLGEN FOR ACTIVITY TYPES */ 01880000
EXEC SQL INCLUDE DSN8MPPA; /* DCLGEN FOR PROJECT/ACTIVITIES */ 01890000
EXEC SQL INCLUDE DSN8MPEP; /* DCLGEN FOR PROJECT/STAFFING */ 01900000
EXEC SQL INCLUDE DSN8MPPR; /* DCLGEN FOR PROJ/RESP EMPLOYEE */ 01910000
EXEC SQL INCLUDE DSN8MPPD; /* DCLGEN FOR PROJ STRUCTURE DETAIL */ 01920000
EXEC SQL INCLUDE DSN8MPP2; /* DCLGEN FOR PROJ STRUCTURE DETAIL */ 01930000
EXEC SQL INCLUDE DSN8MPSA; /* DCLGEN FOR PROJ ACTIVITY LISTING */ 01940000
EXEC SQL INCLUDE DSN8MPS2; /* DCLGEN FOR PROJ ACTIVITY LISTING */ 01950000
EXEC SQL INCLUDE DSN8MPFP; /* DCLGEN FOR PROJECT-EMPLOYEE */ 01955000
EXEC SQL INCLUDE DSN8MPED; /* DCLGEN FOR EMPLOYEE-DEPT */ 01957000
/* PROGRAMMING TABLES */ 01960000
EXEC SQL INCLUDE DSN8MPOV; /* DCLGEN FOR OPTION VALIDATION */ 01970000
EXEC SQL INCLUDE DSN8MPDT; /* DCLGEN FOR DISPLAY TEXT TABLE */ 01980000
01990000
/* CURSORS */ 02000000
EXEC SQL INCLUDE DSN8MPPL; /* MAJSYS P - SEC SEL FOR PS, AL, PR*/ 02010000
EXEC SQL INCLUDE DSN8MPES; /* MAJSYS P - SEC SEL FOR AE */ 02020000
EXEC SQL INCLUDE DSN8MPAS; /* MAJSYS P - SEC SEL FOR AS */ 02030000
EXEC SQL INCLUDE DSN8MPPE; /* MAJSYS P - DETAIL FOR PS */ 02040000
EXEC SQL INCLUDE DSN8MPSL; /* MAJSYS P - DETAIL FOR AL */ 02050000
EXEC SQL INCLUDE DSN8MPDH; /* PROG TABLES - DISPLAY HEADINGS */ 02060000
02070000
DCL LENGTH BUILTIN; 02080000
/********************************************************/ 02090000
/* ** FIELDS SENT TO MESSAGE ROUTINE */ 02100000
/********************************************************/ 02110000
02120000
DCL MODULE CHAR (07) INIT ('DSN8IP8'); 02130000
DCL OUTMSG CHAR (69); 02140000
02150000
DCL DSN8MPG EXTERNAL ENTRY; 02160000
02170000
/*********************************************************/ 02180000
/* SQL RETURN CODE HANDLING */ 02190000
/*********************************************************/ 02200000
02210000
EXEC SQL WHENEVER SQLERROR GO TO DB_ERROR; 02220000
EXEC SQL WHENEVER SQLWARNING GO TO DB_ERROR; 02230000
02240000
0 DCL UNSPEC BUILTIN; 02250000
DCL VERIFY BUILTIN; 02260000
02270000
/*********************************************************/ 02280000
/* INITIALIZATIONS */ 02290000
/*********************************************************/ 02300000
02310000
DSN8_MODULE_NAME.MAJOR='DSN8IP8'; 02320000
DSN8_MODULE_NAME.MINOR=' '; 02330000
02340000
/***********************************************************/ 02350000
/* DETERMINES WHETHER NEW REQUEST OR NOT */ 02360000
/***********************************************************/ 02370000
02380000
/* IF 'NO ANSWER POSSIBLE' SET BY DETAIL PROCESSOR THEN FORCE A */ 02390000
/* NEW REQUEST. */ 02400000
02410000
IF PCONVSTA.PREV = ' ' THEN COMPARM.NEWREQ = 'Y'; 02420000
02430000
/* IF ANSWER TO SECONDARY SELECTION THEN DETERMINE IF REALLY A */ 02440000
/* NEW REQUEST. IT WILL BE CONSIDERED A NEW REQUEST IF POSITIONS*/ 02450000
/* 3 TO 60 ARE NOT ALL BLANK AND THE ENTERED DATA IF NOT 'NEXT' */ 02460000
02470000
IF COMPARM.NEWREQ = 'N' & PCONVSTA.PREV = 'S' & 02480000
SUBSTR(COMPARM.DATA,3,58) ^= ' ' & 02490000
COMPARM.DATA ^= 'NEXT' 02500000
THEN COMPARM.NEWREQ = 'Y'; 02510000
02520000
/***********************************************************/ 02530000
/* IF NEW REQUEST AND ACTION IS 'ADD' THEN */ 02540000
/* CALL DETAIL PROCESSOR */ 02550000
/* ELSE CALL SECONDARY SELECTION */ 02560000
/***********************************************************/ 02570000
02580000
IF COMPARM.NEWREQ='Y' THEN 02590000
DO; 02600000
IF COMPARM.ACTION = 'A' THEN 02610000
DO; 02620000
CALL DETAIL; /* CALL DETAIL PROCESSOR */ 02630000
GO TO EXIT; /* RETURN */ 02640000
END; 02650000
02660000
CALL SECSEL; /* CALL SECONDARY SELECTION */ 02670000
02680000
IF MAXSEL = 1 THEN /* IF NO. OF CHOICES = 1 */ 02690000
CALL DETAIL; /* CALL DETAIL PROCESSOR */ 02700000
GO TO EXIT; /* RETURN */ 02710000
END; 02720000
02730000
/* IF ANSWER TO SECONDARY SELECTION AND NOT A SCROLLING REQUEST */ 02740000
/* (INPUT NOT EQUAL TO 'NEXT') AND THE POSITIONS */ 02750000
/* 1 TO 2 IN INPUT DATA FIELD NOT EQUAL TO POSITIONS 1 TO 2 */ 02760000
/* IN OUTPUT DATA FIELD THEN SEE IF VALID SELECTION. */ 02770000
02780000
/***********************************************************/ 02790000
/* DETERMINES IF VALID SELECTION NUMBER */ 02800000
/***********************************************************/ 02810000
02820000
IF PCONVSTA.PREV ^= 'S' THEN GO TO IP201; /* TO SECONDARY SEL */ 02830000
02840000
IF PCONVSTA.MAXSEL < 1 THEN GO TO IP201; /* NO VALID CHOICES */ 02850000
02860000
IF COMPARM.DATA = 'NEXT' THEN GO TO IP201; /* SCROLL REQUEST */ 02870000
02880000
IF SUBSTR(COMPARM.DATA,1,2) = SUBSTR(PCONVSTA.DATA,1,2) 02890000
THEN GO TO IP201; /* NO CHANGE ON INPUT SCREEN */ 02900000
02910000
IF SUBSTR(COMPARM.DATA,2,1) = ' ' THEN /* SECOND CHAR BLANK */ 02920000
02930000
IF VERIFY(SUBSTR(COMPARM.DATA,1,1),'123456789') = 0 THEN 02940000
DO; 02950000
SUBSTR(COMPARM.DATA,2,1) = SUBSTR(COMPARM.DATA,1,1); 02960000
SUBSTR(COMPARM.DATA,1,1) = '0'; 02970000
END; 02980000
02990000
IF VERIFY(SUBSTR(COMPARM.DATA,1,2),'0123456789') = 0 & 03000000
SUBSTR(COMPARM.DATA,1,2) > '00' THEN 03010000
03020000
IF DATAP <= PCONVSTA.MAXSEL THEN 03030000
DO; 03040000
COMPARM.NEWREQ = 'Y'; /* TELL DETAIL PROCESSOR NEW REQ */ 03050000
CALL DETAIL; /* CALL DETAIL PROCESSOR */ 03060000
GO TO EXIT; /* RETURN */ 03070000
END; 03080000
03090000
/* INVALID SECONDARY */ 03100000
/* SELECTION */ 03110000
/* PRINT ERROR MESSAGE */ 03120000
CALL DSN8MPG (MODULE, '072E', OUTMSG); 03130000
PCONVSTA.MSG = OUTMSG; 03140000
GO TO EXIT; /* RETURN */ 03150000
03160000
/***********************************************************/ 03170000
/* DETERMINES WHETHER SECONDARY SELECTION OR DETAIL */ 03180000
/***********************************************************/ 03190000
03200000
/* MUST BE ANY ANSWER TO EITHER SEC SEL OR DETAIL */ 03210000
IP201: 03220000
IF PCONVSTA.PREV = 'S' THEN 03230000
DO; 03240000
CALL SECSEL; /* CALL SECONDARY SELECTION*/ 03250000
GO TO EXIT; /* RETURN */ 03260000
END; 03270000
03280000
IF PCONVSTA.PREV = 'D' THEN 03290000
DO; 03300000
CALL DETAIL; /* CALL DETAIL PROCESSOR */ 03310000
GO TO EXIT; /* RETURN */ 03320000
END; 03330000
03340000
/* LOGIC ERROR */ 03350000
/* PRINT ERROR MESSAGE */ 03360000
CALL DSN8MPG (MODULE, '066E', OUTMSG); 03370000
PCONVSTA.MSG= OUTMSG; 03380000
GO TO EXIT; /* RETURN */ 03390000
03400000
EXEC SQL INCLUDE DSN8MPXX; /* HANDLES SQL ERRORS */ 03410000
GO TO EXIT; /* RETURN */ 03420000
03430000
/************************************************************/ 03440000
/* CALLS SECONDARY SELECTION AND RETURNS TO SQL 1 */ 03450000
/* NOTE - SAME SECONDARY SELECTION MODULE FOR DS, DE AND EM */ 03460000
/************************************************************/ 03470000
03480000
SECSEL: PROC; /* CALL APPROPRIATE SECONDARY SELECTION MODULE */ 03490000
PCONVSTA.LASTSCR = 'DSN8001'; /* NOTE GENERAL SCREEN */ 03500000
IF COMPARM.OBJFLD='AE' | /*ACTIVITY ESTIMATE */ 03510002
COMPARM.OBJFLD='AL' | /*PROJECT ACTIVITY LISTING */ 03520002
COMPARM.OBJFLD='AS' | /*INDIVIDUAL PROJECT STAFFING */ 03530002
COMPARM.OBJFLD='PR' | /*INDIVIDUAL PROJECT PROCESSING*/ 03540002
COMPARM.OBJFLD='PS' THEN /*PROJECT STRUCTURE */ 03550002
DO; 03560000
CALL DSN8MPM; /*SECONDARY SELECTION FOR PROJECTS*/ 03570000
RETURN; /*RETURN */ 03580000
END; 03590000
/* SECONDARY SELECTION MISSING */ 03600000
/* PRINT ERROR MESSAGE */ 03610000
CALL DSN8MPG (MODULE, '062E', OUTMSG); 03620000
PCONVSTA.MSG= OUTMSG; 03630000
GO TO EXIT; 03640000
END SECSEL; 03650000
/**********************************************************/ 03660000
/* CALLS DETAIL PROCESSOR AND RETURNS TO SQL 1 */ 03670000
/**********************************************************/ 03680000
03690000
DETAIL: PROC; /* CALL APPROPRIATE DETAIL MODULE */ 03700000
PCONVSTA.LASTSCR = 'DSN8002'; /* SET FOR DETAIL MAP */ 03710000
03720000
IF COMPARM.OBJFLD='PS' THEN 03730002
DO; 03740000
CALL DSN8MPV; /* PROJECT STRUCTURE DETAIL */ 03750000
RETURN; 03760000
END; 03770000
03780000
IF COMPARM.OBJFLD='AL' THEN 03790002
DO; 03800000
CALL DSN8MPT; /* PROJECT ACTIVITY LIST */ 03810000
RETURN; 03820000
END; 03830000
03840000
IF COMPARM.OBJFLD='PR' THEN 03850002
DO; 03860000
CALL DSN8MPZ; /* PROJECT DETAIL */ 03870000
RETURN; 03880000
END; 03890000
03900000
IF COMPARM.OBJFLD='AE' THEN 03910002
DO; 03920000
CALL DSN8MPX; /* ACTIVITY ESTIMATE DETAIL */ 03930000
RETURN; 03940000
END; 03950000
03960000
IF COMPARM.OBJFLD='AS' THEN 03970002
DO; 03980000
CALL DSN8MPW; /* ACTIVITY STAFFING DETAIL */ 03990000
RETURN; 04000000
END; 04010000
/* MISSING DETAIL MODULE */ 04020000
/* PRINT ERROR MESSAGE */ 04030000
CALL DSN8MPG (MODULE, '062E', OUTMSG); 04040000
PCONVSTA.MSG= OUTMSG; 04050000
GO TO EXIT; 04060000
END DETAIL; 04070000
04080000
EXIT: RETURN; /* RETURNS TO SQL 1 */ 04090000
04100000
/* PROJECTS */ 04110000
EXEC SQL INCLUDE DSN8MPM; /* SEC SEL - PROJECTS */ 04120000
EXEC SQL INCLUDE DSN8MPV; /* DETAIL - PROJ STRUCTURE */ 04130000
EXEC SQL INCLUDE DSN8MPT; /* DETAIL - PROJ ACT LISTING*/ 04140000
EXEC SQL INCLUDE DSN8MPZ; /* DETAIL - INDIVIDUAL PROJ */ 04150000
EXEC SQL INCLUDE DSN8MPX; /* DETAIL - INDIVID ACTIVITY*/ 04160000
EXEC SQL INCLUDE DSN8MPW; /* DETAIL - INDIVID STAFFING*/ 04170000
END DSN8IP8; 04180000