DYNAMIC RESULT SETS 1
LANGUAGE SQL
BEGIN

	            BEGIN
					                   DECLARE crs CURSOR WITH RETURN FOR
								       SELECT Programs_4.ProgramID,
									            T_N1.N1,
									            T_N1m.n1,
									            T_N2.N2,
									            T_N2m.n2,
									            (Programs_4.Ancestor || Programs_4.ProgramName) AS k
									     FROM
										       (
												   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
													WHERE p.ProgramID IN (SELECT * FROM SESSION.numeric_param_temp)
												) Programs_4
									          LEFT OUTER JOIN
														(
														    SELECT T.ProgramID,
																 COUNT(T.cnt) AS n2
														    FROM
																  (
																	 SELECT prg.ProgramID,
																		   COUNT(*) AS cnt
																	 FROM Programs prg
																		 INNER JOIN OccurrencesStmt os ON prg.ProgramID = os.ProgID
																	 WHERE prg.OccurID <> 0
																	     AND prg.ProgramID IN (SELECT * FROM SESSION.numeric_param_temp)
																		 AND os.StatementType IN (SELECT * FROM SESSION.STMTTYPES)
																	 GROUP BY prg.ProgramID,
																			os.StatementType
																  ) AS T
														    GROUP BY T.ProgramID
														) AS T_N2m ON Programs_4.ProgramID = T_N2m.ProgramID
									          LEFT OUTER JOIN
														(
														    SELECT Programs_3.ProgramID,
																 COUNT(OccurrencesStmt_3.StatementType) AS N2
														    FROM OccurrencesStmt AS OccurrencesStmt_3
															    INNER JOIN Programs AS Programs_3 ON OccurrencesStmt_3.ProgID = Programs_3.ProgramID
														    WHERE Programs_3.OccurID <> 0
															    AND Programs_3.ProgramID IN (SELECT * FROM SESSION.numeric_param_temp)
															    AND OccurrencesStmt_3.StatementType IN (SELECT * FROM SESSION.STMTTYPES)
														    GROUP BY Programs_3.ProgramID
														) AS T_N2 ON Programs_4.ProgramID = T_N2.ProgramID
									          LEFT OUTER JOIN
														(
									
																 SELECT Programs_2.ProgramID,
																	   COUNT(v.VarName) AS N1
																 FROM Variables v
																	 INNER JOIN Programs AS Programs_2
																	 INNER JOIN OccurrencesStmt  AS OccurrencesStmt_2 ON Programs_2.ProgramID = OccurrencesStmt_2.ProgID
																	 INNER JOIN StatementReference  sr ON OccurrencesStmt_2.OccurID = sr.OccurID ON v.VarID = sr.ResourceID
																 WHERE sr.ResourceType = 4
																	 AND Programs_2.OccurID <> 0
																	 AND Programs_2.ProgramID IN (SELECT * FROM SESSION.numeric_param_temp)
																	 AND OccurrencesStmt_2.StatementType IN (SELECT * FROM SESSION.STMTTYPES)
																 GROUP BY Programs_2.ProgramID
														) AS T_N1 ON Programs_4.ProgramID = T_N1.ProgramID
									          LEFT OUTER JOIN
														(
														    SELECT t_1.ProgramID,
																 COUNT(t_1.cnt) AS n1
														    FROM
														    (
									
																	SELECT DISTINCT
																		  Programs_1.ProgramID,
																		  Variables_1.VarName AS cnt
																	FROM Variables AS Variables_1
																	    INNER JOIN StatementReference AS StatementReference_1 ON Variables_1.VarID = StatementReference_1.ResourceID
																		INNER JOIN OccurrencesStmt AS OccurrencesStmt_1 ON OccurrencesStmt_1.OccurID = StatementReference_1.OccurID
																		INNER JOIN Programs AS Programs_1 ON Programs_1.ProgramID = OccurrencesStmt_1.ProgID
																	WHERE StatementReference_1.ResourceType = 4
																		AND Programs_1.OccurID <> 0
																		AND Programs_1.ProgramID IN (SELECT * FROM SESSION.numeric_param_temp)
																		AND OccurrencesStmt_1.StatementType IN  (SELECT * FROM SESSION.STMTTYPES)
														    ) AS t_1
														    GROUP BY t_1.ProgramID
														) AS T_N1m ON Programs_4.ProgramID = T_N1m.ProgramID
									     WHERE T_N1m.n1 IS NOT NULL
									          AND T_N1.N1 IS NOT NULL
									          AND T_N2m.n2 IS NOT NULL
									          AND T_N2.N2 IS NOT NULL
									
									     ORDER BY k;
								
								 OPEN crs;
				
                END;
END 
