DYNAMIC RESULT SETS 1
LANGUAGE SQL
BEGIN


	BEGIN
		DECLARE GLOBAL TEMPORARY TABLE SESSION.programWithAlias (
			ProgramID     INTEGER,
			ProgramName   VARCHAR(256),
			ProgramTypeID INTEGER,
			OccurID       INTEGER,
			AncestorID    INTEGER,
			AncestorName      VARCHAR(256)
		) WITH REPLACE 
          ON COMMIT PRESERVE ROWS
		  NOT LOGGED;

		INSERT INTO SESSION.programWithAlias (ProgramID, ProgramName, ProgramTypeID, OccurID, AncestorID, AncestorName)
		SELECT t.ProgramID, t.ProgramName, t.ProgramTypeID, t.OccurID, t.AncestorID, t.AncestorName
		FROM TABLE (
			fGetProgram_Ancestor_Aliases( CAST(NULL AS INTEGER) )
		) t;

		BEGIN
			DECLARE crs CURSOR WITH RETURN FOR
				SELECT
					s.ProgramName,
					s.ProgramID,
					s.ProgramTypeID,
					s.AncestorID,
					s.AncestorName,
					p.PathID,
					p.PathStr
				FROM (
					SELECT DISTINCT
						pa.ProgramName,
						pa.ProgramID,
						pa.ProgramTypeID,
						pa.AncestorID,
						pa.AncestorName,
						o.PathID
					FROM SESSION.programWithAlias pa
						LEFT OUTER JOIN Occurrences o ON o.OccurID = pa.OccurID
						LEFT OUTER JOIN (
							SELECT AncestorID AS ProgramID
							FROM SESSION.programWithAlias
							WHERE  ProgramTypeID IN (15, 16)
						) f ON pa.ProgramID = f.ProgramID
					WHERE pa.ProgramTypeID != -1
						AND f.ProgramID IS NULL
				) s
					LEFT OUTER JOIN Paths p ON s.PathID = p.PathID
				ORDER BY s.ProgramTypeID, s.ProgramName;
			OPEN crs;
		END;
	END;
END 
