(
IN p_showStandard VARCHAR(250) 
)
DYNAMIC RESULT SETS 1
LANGUAGE SQL
ss: BEGIN

--clean up temp table if exists 
	  BEGIN
		DECLARE CONTINUE HANDLER FOR SQLSTATE '42704'
		BEGIN END;
		
		COMMIT;
		DROP TABLE SESSION.x;
	  END;

      BEGIN
                       
			DECLARE v_showStandard VARCHAR(250);
            
			DECLARE GLOBAL TEMPORARY TABLE SESSION.x
						( 
						   ProgramID INTEGER,
						   ProgramName VARCHAR(260),
						   ProgramTypeId INTEGER,
						   ParentId INTEGER,
						   ElementStartRow INTEGER,
						   ElementEndRow INTEGER,
						   ElementPathStr INTEGER,
						   CallStartRow INTEGER,
						   CallEndRow INTEGER,
						   CallPathStr VARCHAR(260),
						   AncestorName VARCHAR(260),
						   AncestorId INTEGER,
						   DdsTypeId INTEGER
						  )
						ON COMMIT PRESERVE ROWS NOT LOGGED ;
			
            
                       SET v_showStandard = p_showStandard;
            

			           INSERT INTO SESSION.x (ProgramID, ProgramName, ProgramTypeId, ParentId, ElementStartRow, ElementEndRow, ElementPathStr, CallStartRow, CallEndRow, CallPathStr, AncestorName , AncestorId, DdsTypeId)
					   SELECT CASE
											 WHEN sclPrg.ProgramID IS NULL
											 THEN CASE
													WHEN sclPrg1.ProgramID IS NULL THEN pgm.ProgramID
													ELSE sclPrg1.ProgramID
												 END
											 ELSE sclPrg.ProgramID
										  END AS ProgramID,
										  CASE
											 WHEN sclPrg.ProgramName IS NULL
											 THEN CASE
													WHEN sclPrg1.ProgramName IS NULL THEN ddv.Value
													ELSE sclPrg1.ProgramName
												 END
											 ELSE sclPrg.ProgramName
										  END AS ProgramName,
										  CASE
											 WHEN pgm.ProgramTypeID IS NULL THEN 19
											 ELSE pgm.ProgramTypeID
										  END AS ProgramTypeId,
										  DDCLElementParent.Id AS ParentId,
										  CASE
											 WHEN Occurrences_2.StartRow IS NULL
											 THEN CASE
													WHEN Occurrences_3.StartRow IS NULL THEN Occurrences_4.StartRow
													ELSE Occurrences_3.StartRow
												 END
											 ELSE Occurrences_2.StartRow
										  END AS ElementStartRow,
										  CASE
											 WHEN Occurrences_2.EndRow IS NULL
											 THEN CASE
													WHEN Occurrences_3.EndRow IS NULL THEN Occurrences_4.EndRow
													ELSE Occurrences_3.EndRow
												 END
											 ELSE Occurrences_2.EndRow
										  END AS ElementEndRow,
										  CASE
											 WHEN Paths_2.PathStr IS NULL
											 THEN CASE
													WHEN Paths_3.PathStr IS NULL   THEN Paths_4.PathStr
													ELSE Paths_3.PathStr
												 END
											 ELSE Paths_2.PathStr
										  END AS ElementPathStr,
										  CallSourceInfo.StartRow AS CallStartRow,
										  CallSourceInfo.EndRow AS CallEndRow,
										  Paths_1.PathStr AS CallPathStr,
										  CASE
											 WHEN Programs_Ancestor.ProgramName IS NULL
											 THEN Programs_Ancestor1.ProgramName
											 ELSE Programs_Ancestor.ProgramName
										  END AS AncestorName,
										  CASE
											 WHEN Programs_Ancestor.ProgramID IS NULL
											 THEN Programs_Ancestor1.ProgramID
											 ELSE Programs_Ancestor.ProgramID
										  END AS AncestorId,
										  DDCLElementParent.DdsTypeId
									FROM DDCLValue ddv
										INNER JOIN DDCLProperty ddp ON ddv.PropertyId = ddp.Id
										INNER JOIN DDCLElement AS DDCLElementParent ON ddv.ElementId = DDCLElementParent.Id
										INNER JOIN SESSION.numeric_param_temp tmp ON DDCLElementParent.Id = tmp.ProgramID
										LEFT OUTER JOIN Programs AS sclPrg ON UPPER(ddv.Value) = UPPER(sclPrg.ProgramName)
																	 AND sclPrg.ProgramTypeID = 19
										LEFT OUTER JOIN SCLProcedureSynonyms sps ON UPPER(sclPrg.ProgramName) = UPPER(sps.SCLProcedureName)
										LEFT OUTER JOIN SCLProcedureSynonyms AS sclProc ON UPPER(ddv.Value) = UPPER(sclProc.SCLProcedureSynonymName)
										LEFT OUTER JOIN Programs AS sclPrg1 ON UPPER(sclProc.SCLProcedureName) = UPPER(sclPrg1.ProgramName)
										LEFT OUTER JOIN Programs pgm ON (UPPER(ddv.Value) = UPPER(pgm.ProgramName))
															AND (pgm.ProgramTypeID = 1)
										LEFT OUTER JOIN Programs AS Programs_Ancestor ON UPPER(sclPrg.Ancestor) = UPPER(Programs_Ancestor.ProgramName)
																			  AND Programs_Ancestor.ProgramTypeID = 13
										LEFT OUTER JOIN Programs AS Programs_Ancestor1 ON UPPER(sclPrg1.Ancestor) = UPPER(Programs_Ancestor1.ProgramName)
																			   AND Programs_Ancestor1.ProgramTypeID = 13
										INNER JOIN DDCLSourceInfo AS CallSourceInfo ON ddv.SourceInfo = CallSourceInfo.Id
										INNER JOIN Programs AS Programs_2 ON CallSourceInfo.ProgramId = Programs_2.ProgramID
										INNER JOIN Occurrences AS Occurrences_1 ON Programs_2.OccurID = Occurrences_1.OccurID
										INNER JOIN Paths AS Paths_1 ON Occurrences_1.PathID = Paths_1.PathID
										LEFT OUTER JOIN Occurrences AS Occurrences_2 ON sclPrg.OccurID = Occurrences_2.OccurID
										LEFT OUTER JOIN Paths AS Paths_2 ON Occurrences_2.PathID = Paths_2.PathID
										LEFT OUTER JOIN Occurrences AS Occurrences_3 ON sclPrg1.OccurID = Occurrences_3.OccurID
										LEFT OUTER JOIN Paths AS Paths_3 ON Occurrences_3.PathID = Paths_3.PathID
										LEFT OUTER JOIN Occurrences AS Occurrences_4 ON pgm.OccurID = Occurrences_4.OccurID
										LEFT OUTER JOIN Paths AS Paths_4 ON Occurrences_4.PathID = Paths_4.PathID
										LEFT OUTER JOIN SCLStandardProcedures AS Cobol_SCL_Std_Proc_Filter ON UPPER(pgm.ProgramName) = UPPER(Cobol_SCL_Std_Proc_Filter.Name)
										LEFT OUTER JOIN Programs AS Cobol_SCL_Proc_Filter ON UPPER(pgm.ProgramName) = UPPER(Cobol_SCL_Proc_Filter.ProgramName)
																				 AND Cobol_SCL_Proc_Filter.ProgramTypeID IN (13, 19)
										LEFT OUTER JOIN SCLProcedureSynonyms AS Cobol_SCL_Proc_Alias_Filter ON UPPER(pgm.ProgramName) = UPPER(Cobol_SCL_Proc_Alias_Filter.SCLProcedureSynonymName)
										LEFT OUTER JOIN SCLStandardProcedures scsp ON UPPER(ddv.Value) = UPPER(scsp.Name)
										WHERE  UPPER(ddp.Name) IN ('MODULE-ID', 'COMPONENT-ID', 'PROGRAM-ID')
										 AND DDCLElementParent.DdsTypeId IN (4, 11, 27, 28)
										 --AND DDCLElementParent.Id IN (SELECT * FROM SESSION.numeric_param_temp)
										 AND (UPPER(v_showStandard) = 'TRUE' OR scsp.Name IS NULL)
										 AND Cobol_SCL_Std_Proc_Filter.Name IS NULL
										 AND Cobol_SCL_Proc_Filter.ProgramTypeID IS NULL
										 AND Cobol_SCL_Proc_Alias_Filter.SCLProcedureSynonymName IS NULL ;
										 
										 
										 
							      INSERT INTO SESSION.x (ProgramID, ProgramName, ProgramTypeId, ParentId, ElementStartRow, ElementEndRow, ElementPathStr, CallStartRow, CallEndRow, CallPathStr, AncestorName , AncestorId, DdsTypeId)
		                          SELECT CASE
											 WHEN sclPrg.ProgramID IS NULL
											 THEN CASE
													WHEN sclPrg1.ProgramID IS NULL THEN pgm.ProgramID
													ELSE sclPrg1.ProgramID
												 END
											 ELSE sclPrg.ProgramID
										  END AS ProgramID,
										  CASE
											 WHEN sclPrg.ProgramName IS NULL
											 THEN CASE
													WHEN sclPrg1.ProgramName IS NULL THEN ddv.ReferenceName
													ELSE sclPrg1.ProgramName
												 END
											 ELSE sclPrg.ProgramName
										  END AS ProgramName,
										  CASE
											 WHEN pgm.ProgramTypeID IS NULL THEN 19 
											 ELSE pgm.ProgramTypeID
										  END AS ProgramTypeId,
										  DDCLElementParent.Id AS ParentId,
										  CASE
											 WHEN Occurrences_2.StartRow IS NULL
											 THEN CASE
													WHEN Occurrences_3.StartRow IS NULL THEN Occurrences_4.StartRow
													ELSE Occurrences_3.StartRow
												 END
											 ELSE Occurrences_2.StartRow
										  END AS ElementStartRow,
										  CASE
											 WHEN Occurrences_2.EndRow IS NULL
											 THEN CASE
													WHEN Occurrences_3.EndRow IS NULL THEN Occurrences_4.EndRow
													ELSE Occurrences_3.EndRow
												 END
											 ELSE Occurrences_2.EndRow
										  END AS ElementEndRow,
										  CASE
											 WHEN Paths_2.PathStr IS NULL
											 THEN CASE
													WHEN Paths_3.PathStr IS NULL THEN Paths_4.PathStr
													ELSE Paths_3.PathStr
												 END
											 ELSE Paths_2.PathStr
										  END AS ElementPathStr,
										  CallSourceInfo.StartRow AS CallStartRow,
										  CallSourceInfo.EndRow AS CallEndRow,
										  Paths_1.PathStr AS CallPathStr,
										  CASE
											 WHEN Programs_Ancestor.ProgramName IS NULL THEN Programs_Ancestor1.ProgramName
											 ELSE Programs_Ancestor.ProgramName
										  END AS AncestorName,
										  CASE
											 WHEN Programs_Ancestor.ProgramID IS NULL THEN Programs_Ancestor1.ProgramID
											 ELSE Programs_Ancestor.ProgramID
										  END AS AncestorId,
										  DDCLElementParent.DdsTypeId
									FROM DDCLValue ddv
										INNER JOIN DDCLProperty ddp ON ddv.PropertyId = ddp.Id
										INNER JOIN DDCLElement AS DDCLElementParent ON ddv.ElementId = DDCLElementParent.Id 
										INNER JOIN SESSION.numeric_param_temp tmp ON DDCLElementParent.Id = tmp.ProgramID
										LEFT OUTER JOIN Programs AS sclPrg ON UPPER(ddv.ReferenceName) = UPPER(sclPrg.ProgramName)
																	 AND sclPrg.ProgramTypeID = 19
										LEFT OUTER JOIN SCLProcedureSynonyms sps ON UPPER(sclPrg.ProgramName) = UPPER(sps.SCLProcedureName)
										LEFT OUTER JOIN SCLProcedureSynonyms AS sclProc ON UPPER(ddv.ReferenceName) = UPPER(sclProc.SCLProcedureSynonymName)
										LEFT OUTER JOIN Programs AS sclPrg1 ON UPPER(sclProc.SCLProcedureName) = UPPER(sclPrg1.ProgramName)
										LEFT OUTER JOIN Programs pgm ON (UPPER(ddv.ReferenceName) = UPPER(pgm.ProgramName))
															AND (pgm.ProgramTypeID = 1)
										LEFT OUTER JOIN Programs AS Programs_Ancestor ON UPPER(sclPrg.Ancestor) = UPPER(Programs_Ancestor.ProgramName)
																			  AND Programs_Ancestor.ProgramTypeID = 13
										LEFT OUTER JOIN Programs AS Programs_Ancestor1 ON UPPER(sclPrg1.Ancestor) = UPPER(Programs_Ancestor1.ProgramName)
																			   AND Programs_Ancestor1.ProgramTypeID = 13
										INNER JOIN DDCLSourceInfo AS CallSourceInfo ON ddv.SourceInfo = CallSourceInfo.Id
										INNER JOIN Programs AS Programs_2 ON CallSourceInfo.ProgramId = Programs_2.ProgramID
										INNER JOIN Occurrences AS Occurrences_1 ON Programs_2.OccurID = Occurrences_1.OccurID
										INNER JOIN Paths AS Paths_1 ON Occurrences_1.PathID = Paths_1.PathID
										LEFT OUTER JOIN Occurrences AS Occurrences_2 ON sclPrg.OccurID = Occurrences_2.OccurID
										LEFT OUTER JOIN Paths AS Paths_2 ON Occurrences_2.PathID = Paths_2.PathID
										LEFT OUTER JOIN Occurrences AS Occurrences_3 ON sclPrg1.OccurID = Occurrences_3.OccurID
										LEFT OUTER JOIN Paths AS Paths_3 ON Occurrences_3.PathID = Paths_3.PathID
					                    LEFT OUTER JOIN Occurrences AS Occurrences_4 ON pgm.OccurID = Occurrences_4.OccurID
										LEFT OUTER JOIN Paths AS Paths_4 ON Occurrences_4.PathID = Paths_4.PathID
										LEFT OUTER JOIN SCLStandardProcedures AS Cobol_SCL_Std_Proc_Filter ON UPPER(pgm.ProgramName) = UPPER(Cobol_SCL_Std_Proc_Filter.Name)
										LEFT OUTER JOIN Programs AS Cobol_SCL_Proc_Filter ON UPPER(pgm.ProgramName) = UPPER(Cobol_SCL_Proc_Filter.ProgramName)
																				 AND Cobol_SCL_Proc_Filter.ProgramTypeID IN (13, 19)
										LEFT OUTER JOIN SCLProcedureSynonyms AS Cobol_SCL_Proc_Alias_Filter ON UPPER(pgm.ProgramName) = UPPER(Cobol_SCL_Proc_Alias_Filter.SCLProcedureSynonymName)
										LEFT OUTER JOIN SCLStandardProcedures scsp ON UPPER(ddv.Value) = UPPER(scsp.Name)
										WHERE  UPPER(ddp.Name) = 'TASK'
											   AND DDCLElementParent.DdsTypeId IN (26)
											   --AND DDCLElementParent.Id IN (SELECT * FROM SESSION.numeric_param_temp)
											   AND (UPPER(v_showStandard) = 'TRUE' OR scsp.Name IS NULL)
											   AND Cobol_SCL_Std_Proc_Filter.Name IS NULL
											   AND Cobol_SCL_Proc_Filter.ProgramTypeID IS NULL
											   AND Cobol_SCL_Proc_Alias_Filter.SCLProcedureSynonymName IS NULL ;
										

		   

		   BEGIN
		  
					  DECLARE crs CURSOR WITH RETURN FOR	      	      
					  SELECT DISTINCT
					         ProgramID, ProgramName, ProgramTypeId, ParentId, ElementStartRow, ElementEndRow, ElementPathStr, 
					         CallStartRow, CallEndRow, CallPathStr, AncestorName , AncestorId, DdsTypeId 
					  FROM SESSION.x
					  ORDER BY ProgramName;
					  
					  OPEN crs;
			
		   END;
		   
		   
	  END;	   

END ss 