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.ProgramTypeID = 1
						       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.ProgramTypeID = 1
					          
					    )src
					     ORDER BY src.ProgramName,
					              src.PathStr;
					        
					        
     
		            
		            OPEN crs;
            END;
			
		END;	
            
 END ss	
 
 
 
