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.prog;
			
		 END;


          BEGIN


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

             INSERT INTO SESSION.prog (ProgramID, ProgramName, ProgramNameU, ProgramTypeID, Ancestor, AncestorU, OccurID, AliasType)
	         SELECT p1.ProgramID, p2.AliasName AS ProgramName, UPPER(p2.AliasName) AS ProgramNameU, p1.ProgramTypeID, p1.Ancestor, UPPER(p1.Ancestor) AS AncestorU, 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 UPPER(temp1.prgName) = p.ProgramNameU
										   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, ProgramNameU, ProgramTypeID 
														   FROM SESSION.prog 
														   WHERE ProgramTypeID = 8
														   GROUP BY ProgramID, ProgramNameU, ProgramTypeID 
														   ) aprog ON aprog.ProgramNameU = p.AncestorU
									  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 UPPER(temp2.imsTran) = UPPER(res.Name)
									WHERE res.ResourceType=20
							   )src ;

				       OPEN crs;
				
                END;
				
		END;
		
END ss	