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.f1;
			DROP TABLE SESSION.f2;
		 END;


          BEGIN


		            DECLARE GLOBAL TEMPORARY TABLE SESSION.f1
					( 
		                 ID INTEGER,
		                 ElementId INTEGER,
						 ReferenceName   VARGRAPHIC(512),
						 ReferenceDdsTypeId INTEGER
					)
					CCSID UNICODE 
					ON COMMIT PRESERVE ROWS NOT LOGGED ;


                    DECLARE GLOBAL TEMPORARY TABLE SESSION.f2
					( 
		                 ID INTEGER,
		                 ElementId INTEGER,
						 ReferenceName   VARGRAPHIC(512),
						 ssavID INTEGER,
						 Name VARGRAPHIC(256),
						 ReferenceDdsTypeId INTEGER
					)
					CCSID UNICODE 
					ON COMMIT PRESERVE ROWS NOT LOGGED ;




              INSERT INTO SESSION.f1(Id, ElementId,  ReferenceName,  ReferenceDdsTypeId)
              select ssp.Id, ssp.ElementId, UPPER(rrv.ReferenceName), rrv.ReferenceDdsTypeId 
			  from DDCLProperty ssp
					inner join DDCLValue ssv on ssp.id = ssv.PropertyId and ssv.ValueTypeId = 1 and UPPER(ssv.Name) = 'ALL' and UPPER(ssv.Value) = 'TRUE'
					inner join DDCLValue srv on ssp.id = srv.PropertyId and srv.ValueTypeId = 2 and srv.ReferenceDdsTypeId = 6
					inner join DDCLElement se on se.Name = srv.ReferenceName and se.DdsTypeId = 6
					inner join DDCLValue rrv on rrv.ElementId = se.Id and rrv.ReferenceDdsTypeId = 10
			  where  UPPER(ssp.Name) =  'SCHEMA'
			;


             INSERT INTO SESSION.f2(ID, ElementId,  ReferenceName, ssavID, Name, ReferenceDdsTypeId)
             select ssp.Id, ssp.ElementId , UPPER(ssv.ReferenceName), ssav.Id AS ssavID, ssp.Name , ssv.ReferenceDdsTypeId 
			 from DDCLProperty ssp
				    left join DDCLValue ssv on ssp.id = ssv.PropertyId and ssv.ValueTypeId = 2 
				    left join DDCLValue ssav on ssp.id = ssav.PropertyId  and ssav.ValueTypeId = 1 and UPPER(ssav.Name) = 'ALL' and UPPER(ssav.Value) = 'TRUE'
			 where UPPER(ssp.Name)  = 'SETS'
			 ; 
          
            
	            BEGIN
					    DECLARE crs CURSOR WITH RETURN FOR
					    SELECT DISTINCT
					            dde.Id,
					            ddv.ReferenceName,
					            ddv.ReferenceDdsTypeId,
					            ddv.ElementId AS ParentId,
					            ElementSourceInfo.StartRow AS ElementStartRow,
					            ElementSourceInfo.EndRow AS ElementEndRow,
					            Paths_1.PathStr AS ElementPathStr,
					            CallSourceInfo.StartRow AS CallStartRow,
					            CallSourceInfo.EndRow AS CallEndRow,
					            Paths_2.PathStr AS CallPathStr,
					            ddp.Name AS PropertyName
					     FROM DDCLElement dde
					          RIGHT OUTER JOIN DDCLValue ddv ON UPPER(dde.Name) = UPPER(ddv.ReferenceName)
					                                      AND dde.DdsTypeId = ddv.ReferenceDdsTypeId
					          INNER JOIN DDCLProperty ddp ON ddv.PropertyId = ddp.Id
					          INNER JOIN DDCLElement AS DDCLElementParent ON ddv.ElementId = DDCLElementParent.Id
					          INNER JOIN DDCLRelationV AS DDCLRelationV_Parent ON DDCLElementParent.Id = DDCLRelationV_Parent.FromElementId
					          INNER JOIN DDCLElement AS SubschemaElem ON DDCLRelationV_Parent.ToElementId = SubschemaElem.Id
					          LEFT OUTER JOIN DDCLSourceInfo AS ElementSourceInfo ON dde.SourceInfo = ElementSourceInfo.Id
					          LEFT OUTER JOIN Programs AS Programs_1 ON ElementSourceInfo.ProgramId = Programs_1.ProgramID
					          LEFT OUTER JOIN Occurrences AS Occurrences_1 ON Programs_1.OccurID = Occurrences_1.OccurID
					          LEFT OUTER JOIN Paths AS Paths_1 ON Occurrences_1.PathID = Paths_1.PathID
					          INNER JOIN DDCLSourceInfo AS CallSourceInfo ON ddv.SourceInfo = CallSourceInfo.Id
					          INNER JOIN Programs AS Programs_2 ON CallSourceInfo.ProgramId = Programs_2.ProgramID
					          INNER JOIN Occurrences AS Occurrences_2 ON Programs_2.OccurID = Occurrences_2.OccurID
					          INNER JOIN Paths AS Paths_2 ON Occurrences_2.PathID = Paths_2.PathID
							-- next joins are implemented for filter purpose
							  LEFT OUTER JOIN SESSION.f1 f1 ON f1.ElementId = SubschemaElem.Id AND f1.ReferenceName = UPPER(ddv.ReferenceName)  
						      LEFT OUTER JOIN SESSION.f2 f2 ON f2.ElementId = SubschemaElem.Id AND f2.ReferenceDdsTypeId = ddv.ReferenceDdsTypeId
														         AND (f2.ReferenceName = UPPER(ddv.ReferenceName) or f2.ssavID is not null)	
							/*LEFT OUTER JOIN (
											  select ssp.Id, ssp.ElementId, rrv.ReferenceName, rrv.ReferenceDdsTypeId 
											  from DDCLProperty ssp
													inner join DDCLValue ssv on ssp.id = ssv.PropertyId and ssv.ValueTypeId = 1 and UPPER(ssv.Name) = 'ALL' and UPPER(ssv.Value) = 'TRUE'
													inner join DDCLValue srv on ssp.id = srv.PropertyId and srv.ValueTypeId = 2 and srv.ReferenceDdsTypeId = 6
													inner join DDCLElement se on se.Name = srv.ReferenceName and se.DdsTypeId = 6
													inner join DDCLValue rrv on rrv.ElementId = se.Id and rrv.ReferenceDdsTypeId = 10
											  where  UPPER(ssp.Name) =  'SCHEMA' 		
					
											  )f1 ON f1.ElementId = SubschemaElem.Id AND  UPPER(f1.ReferenceName) = UPPER(ddv.ReferenceName)
							LEFT OUTER JOIN (
												 select ssp.Id, ssp.ElementId , ssv.ReferenceName, ssav.Id AS ssavID, ssp.Name , ssv.ReferenceDdsTypeId 
												 from DDCLProperty ssp
													    left join DDCLValue ssv on ssp.id = ssv.PropertyId and ssv.ValueTypeId = 2 
													    left join DDCLValue ssav on ssp.id = ssav.PropertyId  and ssav.ValueTypeId = 1 and UPPER(ssav.Name) = 'ALL' and UPPER(ssav.Value) = 'TRUE'
												 where UPPER(ssp.Name)  = 'SETS'
											  )f2 ON  f2.ElementId = SubschemaElem.Id
													AND f2.ReferenceDdsTypeId = ddv.ReferenceDdsTypeId
													AND (UPPER(f2.ReferenceName) = UPPER(ddv.ReferenceName) or f2.ssavID is not null) */					
					     WHERE ddv.ReferenceDdsTypeId = 10
					          AND ddv.ValueTypeId IN (2, 4)
							  AND (f1.ID IS NOT NULL  OR  f2.ID IS NOT NULL)
					          AND DDCLElementParent.DdsTypeId IN ( 11, 16) 
							  AND UPPER(ddp.name) IN ('CHANGES', 'SINGULAR-VIEW')
                              AND DDCLElementParent.Id IN (SELECT * FROM SESSION.numeric_param_temp)
						 ORDER BY ddv.ReferenceName;
					    

				       OPEN crs;
				
                END;
                
         END;  
              
END ss 