DYNAMIC RESULT SETS 1
LANGUAGE SQL
 BEGIN

          BEGIN


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

             INSERT INTO SESSION.prog (ProgramID, ProgramName, ProgramTypeID, Ancestor, OccurID, AliasType)
	         SELECT p1.ProgramID, p2.AliasName AS ProgramName, p1.ProgramTypeID, p1.Ancestor, p1.OccurId, p2.AliasType
			 FROM Programs p1
				    INNER JOIN ProgramAliases p2 ON p2.ProgramId = p1.ProgramId ;


	            BEGIN
					    DECLARE crs CURSOR WITH RETURN FOR
                        SELECT ID, ProgramID, ProgramName, ProgramTypeID, ProgramPath, Ancestor, AncestorID, AncestorTypeID
					    FROM
							  (
									   SELECT temp1.ID,
											  p.ProgramID,
											  p.ProgramName,
											  p.ProgramTypeID,
											  pth.Pathstr AS ProgramPath,
											  p.Ancestor,
											  aprog.ProgramID AS AncestorID,
											  aprog.ProgramTypeID AS AncestorTypeID
									  FROM SESSION.prog p
										   INNER JOIN SESSION.tempAPI temp1 on temp1.prgName = p.ProgramName
										   LEFT OUTER JOIN Occurrences occ ON p.OccurID = occ.OccurID
										   LEFT OUTER JOIN Paths pth ON occ.Pathid = pth.Pathid
										   LEFT OUTER JOIN
														   (
														   SELECT ProgramID, ProgramName, ProgramTypeID
														   FROM SESSION.prog
														   WHERE ProgramTypeID = 8
														   GROUP BY ProgramID, ProgramName, ProgramTypeID
														   ) aprog ON aprog.ProgramName = p.Ancestor
									  WHERE p.AliasType = 0
					
									  UNION
					
									 SELECT  temp2.ID,
										     res.ResourceID AS ProgramID,
										     res.Name AS ProgramName,
										     CAST(NULL AS INTEGER) AS ProgramTypeID,
										     '' AS ProgramPath,
										     '' AS Ancestor,
										     CAST(NULL AS INTEGER) AS AncestorID,
										     CAST(NULL AS INTEGER) AS AncestorTypeID
									FROM Resources res
										INNER JOIN SESSION.tempAPI temp2 oN temp2.imsTran = res.Name
									WHERE res.ResourceType=20
							   )src ;

				       OPEN crs;
				
                END;
				
		END;
		
END	
