AS
BEGIN
SET NOCOUNT ON


IF OBJECT_ID('dbo.cacheEZViewer_Usage_ProcInJob') IS NOT NULL  DROP TABLE dbo.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
INTO dbo.cacheEZViewer_Usage_ProcInJob
FROM (   -- steps that invoke a proc
	   SELECT JCLJob.JobID,
			JCLJob.JobName,
			JCLJob.MemberName,
			ca7_jobs.JOB_NAME AS CA7JobName,
			ca7_jobs.JobId AS CA7JobId,
			JobPosition.ResourceFilePath AS JobPath,
			JCLProc.ProcName,
			JCLProc.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,
			JCLStep.StepName,
			JCLPosition.ResourceFilePath AS StepPath,
			JCLPosition.StartRow AS stepStartRow,
			JCLPhysicalDataSet.DataSetName,
			CASE
			    WHEN JCLPhysicalDataSet.IsGeneration = '1'
			    THEN JCLPhysicalDataSet.GenerationNumber
			    ELSE NULL
			END AS GenerationNumber,
			JCLPhysicalDataSet.DataSetID,
			JCLPhysicalDataSet.IsTemp,
			JCLDDRef.MemberName AS DataSetMemberName,
			JCLSpoolDataSet.Class,
			JCLDD.DDName,
			CASE
			    WHEN JCLDD.OverridingDDID > 0 THEN NULLIF(DDPositionOver.ResourceFilePath, '0')     
			    ELSE NULLIF(DDPosition.ResourceFilePath, '0')  
			END AS DDPath,
			CASE
			    WHEN JCLDD.OverridingDDID > 0  THEN DDPositionOver.StartRow
			    ELSE DDPosition.StartRow
			END AS DDStartRow,
			JCLStatusType.Description AS Status,
			JCLDisposition.Description AS NormalDisposition,
			CASE
			    WHEN JCLDD.DDID IS NULL
			    THEN NULL
			    ELSE JCLDD.IsDummy
			END AS IsDummy,
			CASE
			    WHEN JCLDD.DDID IS NULL
			    THEN NULL
			    ELSE JCLDD.OverridingDDID
			END AS OverridingDDID
	   FROM dbo.JCLStep
		   INNER JOIN dbo.JCLProc ON JCLProc.ProcID = JCLStep.CalledProcID
		   INNER JOIN dbo.JCLPosition ON JCLPosition.PositionID = JCLStep.PositionID
		   INNER JOIN dbo.JCLJob ON JCLStep.JobID = JCLJob.JobID
		   INNER JOIN dbo.JCLPosition AS ProcPosition ON ProcPosition.PositionID = JCLProc.PositionID
		   INNER JOIN dbo.JCLPosition AS JobPosition ON JCLJob.PositionID = JobPosition.PositionID
		   LEFT OUTER JOIN dbo.ca7_jobs ON ca7_jobs.JCL_MEMBER = JCLJob.MemberName
		   LEFT OUTER JOIN dbo.JCLDD ON JCLDD.StepID = JCLStep.StepID
		   LEFT OUTER JOIN dbo.JCLDDRef ON JCLDDRef.DDID = JCLDD.DDID
		   LEFT OUTER JOIN dbo.JCLPhysicalDataSet ON JCLPhysicalDataSet.DataSetID = JCLDDRef.DataSetID AND (JCLPhysicalDataSet.IsInstream <> 1 OR JCLPhysicalDataSet.IsInstream IS NULL)
		   LEFT OUTER JOIN dbo.JCLSpoolDataSet ON JCLSpoolDataSet.SpoolID = JCLDDRef.SpoolDataSetID
		   LEFT OUTER JOIN dbo.JCLStatusType ON JCLDDRef.Status = JCLStatusType.JCLStatusType
		   LEFT OUTER JOIN dbo.JCLDisposition ON JCLDDRef.NormalDisposition = JCLDisposition.JCLDispositionType
		   LEFT OUTER JOIN dbo.JCLPosition AS DDPosition ON DDPosition.PositionID = JCLDD.PositionID
		   LEFT OUTER JOIN dbo.JCLDD AS Overr ON JCLDD.OverridingDDID = Overr.DDID
		   LEFT OUTER JOIN dbo.JCLPosition AS DDPositionOver ON DDPositionOver.PositionID = Overr.PositionID
	   WHERE JCLStep.CalledPgmID = 0
		    AND JCLProc.ProcName <> '0'
)s

 
END