DYNAMIC RESULT SETS 1
LANGUAGE SQL
BEGIN
            
    		 -- clean up temp table if exists 
		BEGIN
			DECLARE CONTINUE HANDLER FOR SQLSTATE '42704'
			BEGIN END;
			
			COMMIT;
			DROP TABLE SESSION.programWithAlias;
			
		 END;


          BEGIN



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

             INSERT INTO SESSION.programWithAlias (ProgramID, ProgramName, ProgramNameU, ProgramTypeID, OccurID, AncestorID, Ancestor)
             SELECT t.ProgramID, t.ProgramName, UPPER(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 res.Name AS TransactionName,
										    res.ResourceID,
										    pgm.ProgramID AS CalledProgId,
								            pgm.ProgramName AS CalledProgramName,
								            pgm.ProgramTypeID AS CalledProgramTypeID,
								            pgm.Ancestor AS CalledAncestorName,
								            pgm.OccurId,
								            0 AS isMapped										    
									  FROM Resources res
										  INNER JOIN SESSION.programWithAlias pgm ON UPPER(res.ProgName) = pgm.ProgramNameU
									  WHERE res.ResourceType = 14
							                AND UPPER(res.Name) IN (SELECT UPPER(Param) FROM SESSION.string_param_temp)
								       
									   UNION
							     
								     SELECT res.Name AS TransactionName,
										    res.ResourceID,
										    pgm.ProgramID AS CallingProgId,
								            pgm.ProgramName AS CallingProgramName,
								            pgm.ProgramTypeID AS CallingProgramTypeID,
								            pgm.Ancestor AS CallingAncestorName,
								            pgm.OccurId,
								            1 AS isMapped
									  FROM Resources res
										  INNER JOIN StatementReference sr ON sr.ResourceID = res.ResourceID
										  INNER JOIN OccurrencesStmt os ON os.OccurID = sr.OccurID
										  INNER JOIN SESSION.programWithAlias pgm ON os.ProgID = pgm.ProgramID
										  INNER JOIN Paths pth ON pth.PathID = os.PathID
										  --LEFT OUTER JOIN Programs AS Programs_1 ON UPPER(Programs_1.ProgramName) = UPPER(res.ProgName)
									  WHERE sr.ResourceType = 14
									        AND UPPER(res.Name) IN (SELECT UPPER(Param) FROM SESSION.string_param_temp)
								)src
							     ORDER BY TransactionName
							              ,isMapped;

				       OPEN crs;
				
                END;
				
		END;

		
END