LANGUAGE SQL
BEGIN

          BEGIN

			            DECLARE GLOBAL TEMPORARY TABLE SESSION.prog
						(
			                 ProgramName   VARCHAR(256),
			                 AliasName      VARCHAR(256),
			                 ProgramID      INTEGER,
							 ProgramTypeID  INTEGER,
							 ProgramPath   VARCHAR(256),
							 ProgStartRow  INTEGER,
			                 ProgStartCol INTEGER,
			                 ProgEndRow   INTEGER,
			                 ProgEndCol   INTEGER,
			                 Ancestor      VARCHAR(256),
			                 AncestorID      INTEGER,
							 AncestorTypeID  INTEGER
						) WITH REPLACE 
                          ON COMMIT PRESERVE ROWS
						  NOT LOGGED
						;





						 DECLARE GLOBAL TEMPORARY TABLE SESSION.jcl
							(
							DataSetName varchar(100) ,
							GenerationNumber int ,
							DataSetID int ,
							IsTemp int ,
							DataSetMemberName varchar(50) ,
							Class varchar(50) ,
							JobID int ,
							JobName varchar(50) ,
							MemberName varchar(50) ,
							CA7JobName varchar(255) ,
							CA7JobId int ,
							JobPath varchar(250) ,
							StepName varchar(50) ,
							StepPath varchar(250) ,
							stepStartRow int ,
							DDName varchar(50) ,
							DDPath varchar(250) ,
							DDStartRow int ,
							Status varchar(50) ,
							NormalDisposition varchar(50),
							IsDummy int ,
							OverridingDDID int ,
							ProgramName    VARCHAR(256),
							JCLPgm_PgmName VARCHAR(256)
						) WITH REPLACE 
                          ON COMMIT PRESERVE ROWS
						  NOT LOGGED
						;
						
									
						 INSERT INTO SESSION.prog
						 SELECT  DISTINCT
						         pa.AliasName AS ProgramName
								 --,CASE WHEN pa.AliasType = 0 THEN pa.AliasName ELSE NULL END AS AliasName
								 ,pax.AliasName
								 ,prg.ProgramID
								 ,prg.ProgramTypeID
								 ,pth.PathStr AS ProgramPath
								 ,occ.StartRow AS ProgStartRow
								 ,occ.StartCol AS ProgStartCol
								 ,occ.EndRow AS ProgEndRow
								 ,occ.EndCol AS ProgEndCol
								 ,prg.Ancestor
								 ,Programs_Ancestor.ProgramID AS AncestorID
								 ,Programs_Ancestor.ProgramTypeID AS AncestorTypeID
								FROM
									  (SELECT DISTINCT ProgramID
												 ,ProgramTypeID
												 ,Ancestor
												 ,OccurID
									   FROM Programs
									   WHERE ProgramTypeID NOT IN (8 ,13)
									   ) prg
									  INNER JOIN ProgramAliases pa ON prg.ProgramID = pa.ProgramId
									  LEFT OUTER JOIN
													  (SELECT DISTINCT AliasName AS AliasName ,ProgramId
													   FROM ProgramAliases
													   ) AS Aliases_Ancestor ON Aliases_Ancestor.AliasName = prg.Ancestor
									  LEFT OUTER JOIN Programs Programs_Ancestor ON Programs_Ancestor.ProgramID = Aliases_Ancestor.ProgramID AND  Programs_Ancestor.ProgramTypeID IN (8 ,13)
									  LEFT OUTER JOIN Occurrences occ ON occ.OccurID = prg.OccurID
									  LEFT OUTER JOIN Paths pth ON pth.PathID = occ.PathID
						              LEFT OUTER JOIN ProgramAliases pax ON prg.ProgramID = pax.ProgramId AND pax.AliasType = 0;	
                                 COMMIT;



                              INSERT INTO SESSION.jcl
                              SELECT
                                      jpds.DataSetName,
									CASE
									    WHEN jpds.IsGeneration = 1 THEN jpds.GenerationNumber
									    ELSE NULL
									END AS GenerationNumber,
									jpds.DataSetID,
									jpds.IsTemp,
									jref.MemberName AS DataSetMemberName,
									jsds.Class,
									jj.JobID,
									jj.JobName,
									jj.MemberName,
									ca.JOB_NAME AS CA7JobName,
									ca.JobId AS CA7JobId,
									JobPosition.ResourceFilePath AS JobPath,
									js.StepName,
									jpos.ResourceFilePath AS StepPath,
									jpos.StartRow AS stepStartRow,
									jd.DDName,
									CASE
									    WHEN jd.OverridingDDID > 0 THEN NULLIF(DDPositionOver.ResourceFilePath, '0')
									    ELSE NULLIF(DDPosition.ResourceFilePath, '0')
									END AS DDPath,
									CASE
									    WHEN jd.OverridingDDID > 0 THEN DDPositionOver.StartRow
									    ELSE DDPosition.StartRow
									END AS DDStartRow,
									jst.Description AS Status,
									jdis.Description AS NormalDisposition,
									CASE
									    WHEN jd.DDID IS NULL THEN NULL
									    ELSE jd.IsDummy
									END AS IsDummy,
									CASE
									    WHEN jd.DDID IS NULL THEN NULL
									    ELSE jd.OverridingDDID
									END AS OverridingDDID,
									jp.PgmName AS PgmName,
									jp.PgmName AS JCLPgm_PgmName
							   FROM JCLJob jj
								   INNER JOIN JCLStep js ON js.CalledProcID = 0 AND js.JobID = jj.JobID
								   INNER JOIN JCLPgm jp ON jp.PgmID = js.CalledPgmID
								   INNER JOIN JCLPosition jpos ON jpos.PositionID = js.PositionID
								   INNER JOIN JCLPosition AS JobPosition ON jj.PositionID = JobPosition.PositionID
								   LEFT OUTER JOIN ca7_jobs ca ON ca.JCL_MEMBER = jj.MemberName
								   LEFT OUTER JOIN JCLDD jd ON jd.StepID = js.StepID
								   LEFT OUTER JOIN JCLDD AS Overr ON jd.OverridingDDID = Overr.DDID
								   LEFT OUTER JOIN JCLPosition AS DDPositionOver ON DDPositionOver.PositionID = Overr.PositionID
								   LEFT OUTER JOIN JCLPosition AS DDPosition ON DDPosition.PositionID = jd.PositionID
								   LEFT OUTER JOIN JCLDDRef jref ON jref.DDID = jd.DDID
								   LEFT OUTER JOIN JCLPhysicalDataSet jpds ON jpds.DataSetID = jref.DataSetID
								   LEFT OUTER JOIN JCLSpoolDataSet jsds ON jsds.SpoolID = jref.SpoolDataSetID
								   LEFT OUTER JOIN JCLStatusType jst ON jref.Status = jst.JCLStatusType
								   LEFT OUTER JOIN JCLDisposition jdis ON jref.NormalDisposition = jdis.JCLDispositionType
								 WHERE  (jpds.IsInstream <> 1 OR jpds.IsInstream IS NULL) ;
                                 COMMIT;



			            BEGIN
					      COMMIT;
						  TRUNCATE TABLE cacheEZViewer_Usage_PgmInJob IMMEDIATE ;
			              --DELETE FROM cacheEZViewer_Usage_PgmInJob ;
			            END;


					          LOCK TABLE  cacheEZViewer_Usage_PgmInJob IN EXCLUSIVE MODE ;-- lock table
						      INSERT INTO cacheEZViewer_Usage_PgmInJob
							  SELECT DISTINCT
							         j.DataSetName, j.GenerationNumber, j.DataSetID, j.IsTemp, j.DataSetMemberName, j.Class,
						             j.JobID, j.JobName, j.MemberName, j.CA7JobName, j.CA7JobId, j.JobPath,
						             j.StepName, j.StepPath,j.stepStartRow,
						              case when p.AliasName is null then j.JCLPgm_PgmName  else p.AliasName end AS ProgramName,
						             j.DDName, j.DDPath, j.DDStartRow, j.Status, j.NormalDisposition,
						             j.IsDummy, j.OverridingDDID,
						             p.ProgramID, p.ProgramTypeID, p.ProgramPath, p.ProgStartRow, p.ProgStartCol, p.ProgEndRow, p.ProgEndCol,
						             p.Ancestor, p.AncestorID, p.AncestorTypeID
                               FROM  SESSION.jcl j
                                     LEFT OUTER JOIN SESSION.prog p ON p.ProgramName = j.ProgramName ;
						       COMMIT;
						
						
		END;				


END 
