DYNAMIC RESULT SETS 1
LANGUAGE SQL
ss: BEGIN
            

	            BEGIN
					    DECLARE crs CURSOR WITH RETURN FOR
					         SELECT DISTINCT
						            par.ParaID,
						            par.ParaName,
						            os.StatementType,
						            f.LogicalName,
						            f.FileID,
						            os.StartRow,
						            os.EndRow,
						            os.StartCol,
						            os.EndCol,
						            pth.PathStr,
						            f.Name,
						            f.TypeCode,
						            prg.ProgramID,
						            x.DataSetName AS PhysicalFileName,
						            sr.bRead
						     FROM OccurrencesStmt os
							       INNER JOIN 
                                        (   
	                                         SELECT p.ProgramID,
								             p.Ancestor,
										     p.ProgramTypeID,
										     p.OccurID,
								             pa.AliasName AS ProgramName
								        FROM Programs p
								                   INNER JOIN ProgramAliases pa ON p.ProgramID = pa.ProgramId AND pa.AliasType = 0
							            ) prg ON os.ProgID = prg.ProgramID
						          INNER JOIN StatementReference sr ON os.OccurID = sr.OccurID
						          LEFT OUTER JOIN Paragraphs par ON os.ParaID = par.ParaID
						          INNER JOIN Files f ON sr.ResourceID = f.FileID
						          INNER JOIN Paths pth ON pth.PathID = os.PathID
						          LEFT OUTER JOIN(
								                 SELECT  pup.ProgramID, jpds.DataSetName , jd.DDName 
								                 FROM   JCLJob jj
												    INNER JOIN JCLStep js ON jj.JobID = js.JobID
												    LEFT OUTER JOIN ProgramsUsedInPgm pup ON pup.JclPgmID = js.CalledPgmID 
												    INNER JOIN JCLDD jd ON js.StepID = jd.StepID
												    INNER JOIN JCLPosition AS DDPosition ON DDPosition.PositionID = jd.PositionID
												    INNER JOIN JCLDDRef jref ON jd.DDID = jref.DDID
												    LEFT OUTER JOIN JCLPhysicalDataSet jpds ON jref.DataSetID = jpds.DataSetID
											 ) x
											 
											 ON prg.ProgramID = x.ProgramID
						                             AND ( x.DDName IS NULL
						                                  OR (
						                                       UPPER(f.Name) = UPPER(x.DDName)
						                                       OR 
						                                       --UPPER(f.Name) LIKE '%' || '-' || UPPER(x.DDName) 														   
																     (LOCATE_IN_STRING(UPPER(f.Name), '-'|| UPPER(x.DDName), -1) > 0  -- check existence
                                                                      AND 
                                                                      LOCATE_IN_STRING(UPPER(f.Name), '-'|| UPPER(x.DDName), -1) = LENGTH(f.Name) + 1 -1 - LENGTH(x.DDName) -- last position in string
                                                                     )
						                                       
						                                       )
												    )
						     WHERE  UPPER(prg.ProgramName) IN (SELECT UPPER(Param) FROM SESSION.string_param_temp) AND
								      sr.ResourceType = 9
						          AND os.StatementType NOT IN (12, 29, 122, 1819, 124, 1821, 118, 1815)
						          AND (f.TypeCode <> 32 OR f.TypeCode IS NULL)
						     ORDER BY os.StartRow;
					     					          
				        OPEN crs;
				
                END;
END ss	



