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


            
        BEGIN 
		
            DECLARE GLOBAL TEMPORARY TABLE SESSION.DDCLFromPrograms
			( 
			  ids INTEGER
			)ON COMMIT PRESERVE ROWS NOT LOGGED ;

            INSERT INTO SESSION.DDCLFromPrograms(ids) 
            SELECT DISTINCT dde.id
	        FROM Programs pgm
	                INNER JOIN OccurrencesStmt os ON pgm.ProgramID = os.ProgID
	                INNER JOIN StatementReference sr ON os.OccurID = sr.OccurID
				    INNER JOIN (
											   SELECT r.ResourceID, r.OccurID,
													  SUBSTR(r.Name, LOCATE_IN_STRING(r.Name, '-') + 1, LENGTH(r.Name)) AS DDCLElement_Name,
													  SUBSTR(r.Name, 1, CASE WHEN LOCATE_IN_STRING(r.Name, '-')> 0 THEN LOCATE_IN_STRING(r.Name, '-') - 1 ELSE 0 END  ) AS DDCLDdsType_Name
												FROM Resources r
												WHERE r.ResourceType = 13
								) r ON sr.ResourceID =r.ResourceID     
	                INNER JOIN DDCLElement dde ON UPPER(dde.Name) = UPPER(r.DDCLElement_Name)
	                INNER JOIN DDCLDdsType dddt ON UPPER(dddt.Name) = UPPER(DDCLDdsType_Name)
	         WHERE dde.DdsTypeId = 12;


	            BEGIN
					     DECLARE crs CURSOR WITH RETURN FOR
					     SELECT DISTINCT dde.Name
				         FROM DDCLElement dde
				         WHERE dde.DdsTypeId = 12
				               AND dde.Id IN (SELECT * FROM SESSION.numeric_param_temp)
				               AND dde.id NOT IN
												 (
				             
													   SELECT DISTINCT
															dde1.Id
													   FROM DDCLElement dde1
														   RIGHT JOIN DDCLValue ddv ON UPPER(dde1.Name) = UPPER(ddv.ReferenceName)
																				 AND dde1.DdsTypeId = ddv.ReferenceDdsTypeId
														   INNER JOIN DDCLProperty ddp ON ddv.PropertyId = ddp.Id
														   INNER JOIN DDCLElement AS DDCLElementParent ON ddv.ElementId = DDCLElementParent.Id
													   WHERE ddv.ReferenceDdsTypeId = 12
														   AND dde1.Id IN  (SELECT * FROM SESSION.numeric_param_temp)
														   AND UPPER(ddp.Name) IN ('FILES', 'SELECTION')
														   AND DDCLElementParent.DdsTypeId IN (27, 28)
												 )
				         AND dde.id NOT IN (SELECT * FROM SESSION.DDCLFromPrograms)
				         ORDER BY dde.Name;
       
					           
				         OPEN crs;
				
                END;
		END;
		
END ss	




