LANGUAGE SQL
sp:BEGIN   

	BEGIN
      COMMIT; 
      TRUNCATE TABLE cacheEZViewer_Usage_ProcInJob ;
    END;


    LOCK TABLE  cacheEZViewer_Usage_ProcInJob IN EXCLUSIVE MODE ;-- lock table  
	INSERT INTO cacheEZViewer_Usage_ProcInJob
	SELECT DISTINCT JobID, JobName, MemberName, CA7JobName, CA7JobId, JobPath,
		  ProcName, ProcID, ProcPath, ProcStartRow, ProcStartCol, ProcEndRow, ProcEndCol,
		  StepName, StepPath, stepStartRow, DataSetName, GenerationNumber, DataSetID, IsTemp, DataSetMemberName,
		  Class, DDName, DDPath, DDStartRow, Status, NormalDisposition, IsDummy,  OverridingDDID
	FROM (   -- steps that invoke a proc
		   SELECT jj.JobID,
				jj.JobName,
				jj.MemberName,
				ca.JOB_NAME AS CA7JobName,
				ca.JobId AS CA7JobId,
				JobPosition.ResourceFilePath AS JobPath,
				jproc.ProcName,
				jproc.ProcID, 
				----unexisting proc has 0 in JCLPosition for column ResourceFilePath
				NULLIF(ProcPosition.ResourceFilePath, '0') AS ProcPath,
				ProcPosition.StartRow AS ProcStartRow,
				ProcPosition.StartCol AS ProcStartCol,
				ProcPosition.EndRow AS ProcEndRow,
				ProcPosition.EndCol AS ProcEndCol,
				js.StepName,
				jpos.ResourceFilePath AS StepPath,
				jpos.StartRow AS stepStartRow,
				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,
				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,
				jdisp.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
		   FROM JCLStep js 
			   INNER JOIN JCLProc jproc ON jproc.ProcID = js.CalledProcID
			   INNER JOIN JCLPosition jpos ON jpos.PositionID = js.PositionID
			   INNER JOIN JCLJob jj ON js.JobID = jj.JobID
			   INNER JOIN JCLPosition AS ProcPosition ON ProcPosition.PositionID = jproc.PositionID
			   INNER JOIN JCLPosition AS JobPosition ON jj.PositionID = JobPosition.PositionID
			   LEFT OUTER JOIN ca7_jobs ca ON UPPER(ca.JCL_MEMBER) = UPPER(jj.MemberName)
			   LEFT OUTER JOIN JCLDD jd ON jd.StepID = js.StepID
			   LEFT OUTER JOIN JCLDDRef jref ON jref.DDID = jd.DDID
			   LEFT OUTER JOIN JCLPhysicalDataSet jpds ON jpds.DataSetID = jref.DataSetID AND (jpds.IsInstream <> 1 OR jpds.IsInstream IS NULL)
			   LEFT OUTER JOIN JCLSpoolDataSet jsds ON jsds.SpoolID = jref.SpoolDataSetID 
			   LEFT OUTER JOIN JCLStatusType jst ON jref.Status = jst.JCLStatusType
			   LEFT OUTER JOIN JCLDisposition jdisp ON jref.NormalDisposition = jdisp.JCLDispositionType
			   LEFT OUTER JOIN JCLPosition AS DDPosition ON DDPosition.PositionID = jd.PositionID
			   LEFT OUTER JOIN JCLDD AS Overr ON jd.OverridingDDID = Overr.DDID
			   LEFT OUTER JOIN JCLPosition AS DDPositionOver ON DDPositionOver.PositionID = Overr.PositionID
		   WHERE js.CalledPgmID = 0
			    AND jproc.ProcName <> '0'
			    
	)s;
	COMMIT;
						
END 