DYNAMIC RESULT SETS 1
LANGUAGE SQL
BEGIN

          BEGIN


            DECLARE GLOBAL TEMPORARY TABLE SESSION.programWithAlias
			(
                 ProgramID     INTEGER,
				 ProgramName   VARCHAR(256),
				 ProgramTypeID INTEGER,
				 OccurID       INTEGER,
				 AncestorID    INTEGER,
				 Ancestor      VARCHAR(256)
			) WITH REPLACE 
              ON COMMIT PRESERVE ROWS
			  NOT LOGGED;

             INSERT INTO SESSION.programWithAlias (ProgramID, ProgramName, ProgramTypeID, OccurID, AncestorID, Ancestor)
             SELECT t.ProgramID, t.ProgramName, t.ProgramTypeID, t.OccurID, t.AncestorID, t.AncestorName
	         FROM TABLE(
			            fGetProgram_Ancestor_Aliases( CAST(NULL AS INTEGER) )
			         )t
			;

	            BEGIN
					     DECLARE crs CURSOR WITH RETURN FOR
						 SELECT *
						 FROM (
								 SELECT Programs_1.ProgramName AS l,
								        pgm.ProgramName AS k,
							             sr.StartRow AS m,
							             Programs_1.ProgramTypeID AS n
							     FROM SESSION.programWithAlias pgm
							          INNER JOIN OccurrencesStmt os ON pgm.ProgramID = os.ProgID
							          INNER JOIN StatementReference sr ON os.OccurID = sr.OccurID
							          INNER JOIN SESSION.programWithAlias AS Programs_1 ON sr.ResourceID = Programs_1.ProgramID
							          INNER JOIN Occurrences occ ON occ.OccurID = pgm.OccurID
							          INNER JOIN Paths pth ON occ.PathID = pth.PathID
							     WHERE sr.ResourceType = 5
							          AND Programs_1.OccurID = 0
							          AND pgm.OccurID <> 0
							          AND (pgm.Ancestor IS NULL OR pgm.Ancestor = '' OR pgm.ProgramTypeID = 19)
							          AND pgm.ProgramID IN (SELECT * FROM SESSION.numeric_param_temp)
						              AND ((Programs_1.ProgramTypeID = 19
							          AND Programs_1.ProgramName NOT IN (SELECT * FROM SESSION.missing_string_param_temp)
							          AND Programs_1.ProgramName NOT LIKE 'ICLSTDSW.%'
							          AND Programs_1.ProgramName NOT LIKE 'ICL9%'
							          AND Programs_1.ProgramName NOT LIKE 'ICLCTM.%')
							     OR (Programs_1.ProgramTypeID NOT IN (-1, 13, 19))
							     OR (Programs_1.ProgramTypeid = -1
							         AND sr.StartRow NOT IN
										                  (
										                      SELECT DISTINCT x.StartRow
										                      FROM SESSION.CALLING_TEMP x
										                      WHERE     x.ProgramName = pgm.ProgramName
										                            AND x.Ancestor = pgm.Ancestor
										                            AND x.PathStr = pth.PathStr
										                  )
							        ))
							     AND Programs_1.ProgramName NOT IN
														         (
														             SELECT ProgramName
														             FROM EZViewer_DDCL_Callable_View
														         )

							
							     UNION
							
							     SELECT Programs_1.ProgramName AS l,
							            pgm.Ancestor AS k,
							            sr.StartRow AS m,
							            Programs_1.ProgramTypeID AS n
							     FROM SESSION.programWithAlias pgm
							          INNER JOIN OccurrencesStmt os ON pgm.ProgramID = os.ProgID
							          INNER JOIN StatementReference sr ON os.OccurID = sr.OccurID
							          INNER JOIN SESSION.programWithAlias AS Programs_1 ON sr.ResourceID = Programs_1.ProgramID
							          INNER JOIN Occurrences occ ON occ.OccurID = pgm.OccurID
							          INNER JOIN Paths pth ON occ.PathID = pth.PathID
							     WHERE sr.ResourceType = 5
							          AND Programs_1.OccurID = 0
							          AND pgm.OccurID <> 0
							          AND pgm.Ancestor IS NOT NULL
							          AND pgm.Ancestor <> ''
							          AND pgm.ProgramTypeID IN (15, 16)
							          AND pgm.ProgramID IN
													              (
													                  SELECT p1.Programid
													                  FROM Programs  p1
													                       INNER JOIN Programs  p2 ON  p1.ancestor = p2.programname
													                                                       AND p2.programid IN (SELECT * FROM SESSION.numeric_param_temp)
													
													              )

							          AND ((Programs_1.ProgramTypeID = 19
							          AND Programs_1.ProgramName NOT IN (SELECT * FROM SESSION.missing_string_param_temp)
							          AND Programs_1.ProgramName NOT LIKE 'ICLSTDSW.%'
							          AND Programs_1.ProgramName NOT LIKE 'ICL9%'
							          AND Programs_1.ProgramName NOT LIKE 'ICLCTM.%')
							     OR (Programs_1.ProgramTypeID NOT IN (-1, 13, 19))
							     OR (Programs_1.ProgramTypeid = -1
							         AND sr.StartRow NOT IN
										                  (
										                      SELECT DISTINCT x.StartRow
										                      FROM SESSION.CALLING_TEMP x
										                      WHERE     x.ProgramName = pgm.ProgramName
										                            AND x.Ancestor = pgm.Ancestor
										                            AND x.PathStr = pth.PathStr
										                  )
							        ))
							     AND Programs_1.ProgramName NOT IN
														         (
														             SELECT ProgramName
														             FROM EZViewer_DDCL_Callable_View
														         )

						 )src
					     ORDER BY src.n,
					              src.l,
					              src.k,
					              src.m;

				         OPEN crs;
				
                END;

        END;

END	
