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



        BEGIN


            DECLARE GLOBAL TEMPORARY TABLE SESSION.Prg
			( 
			  ProgramID INT,
			  ProgramCnt INT 
			)
			ON COMMIT PRESERVE ROWS NOT LOGGED ;

   
            INSERT INTO SESSION.Prg(ProgramID, ProgramCnt)
            SELECT prg1.ProgramID, COUNT(prg1.ProgramID) AS ProgramCNT
			FROM Programs prg1
				INNER JOIN OccurrencesStmt os2 ON prg1.ProgramID = os2.ProgID
			WHERE os2.StatementType = 21
			GROUP BY prg1.ProgramID;
  

  
	            BEGIN
              
					    DECLARE crs CURSOR WITH RETURN FOR	 
						SELECT *
							FROM
							    (
							     SELECT	 prgAlsxyz.ProgramID,
							            prgAlsxyz.AliasName AS ProgramName,
							            pth.PathStr,
							            1 AS StartRow,
							            0 AS IsCopy
							     FROM Programs prg
							          INNER JOIN Occurrences occ ON prg.OccurID = occ.OccurID
							          INNER JOIN Paths pth ON occ.PathID = pth.PathID
							          LEFT OUTER JOIN SESSION.Prg sp ON sp.ProgramID = prg.ProgramID 
							     	  INNER JOIN ProgramAliases prgAlsxyz ON prg.ProgramId = prgAlsxyz.ProgramID
										AND prgAlsxyz.AliasType = 0
								 WHERE prg.ProgramID IN (SELECT * FROM SESSION.numeric_param_temp) 
								       AND sp.ProgramID IS NULL											   
							
							    
							    UNION
							     SELECT	 prgAlsxyz.ProgramID,
							            prgAlsxyz.AliasName AS ProgramName,
							            pth.PathStr,
							            os1.StartRow,
							            CASE
							                WHEN os1.PathID = occ.PathID
							                THEN 0
							                ELSE -1
							            END AS IsCopy
							     FROM Programs prg
							          INNER JOIN OccurrencesStmt os1 ON prg.ProgramID = os1.ProgID
							          INNER JOIN Occurrences occ ON prg.OccurID = occ.OccurID
							          INNER JOIN Paths pth  ON os1.PathID = pth.PathID
							          INNER JOIN SESSION.Prg sp ON sp.ProgramID = prg.ProgramID AND sp.ProgramCnt > 1
							    	  INNER JOIN ProgramAliases prgAlsxyz ON prg.ProgramId = prgAlsxyz.ProgramID
										AND prgAlsxyz.AliasType = 0
								 WHERE  os1.StatementType = 21
							            AND prg.ProgramID IN (SELECT * FROM SESSION.numeric_param_temp)
							          
							    
							    )src
							     ORDER BY src.ProgramName,
							              src.PathStr;
					    
					    
                        OPEN crs;
                        
                  END; 
        END;
		
 END ss	






