LANGUAGE SQL
BEGIN

            -- cobol -> 56, 1
            DECLARE GLOBAL TEMPORARY TABLE SESSION.core
	             (
	                ProgID INTEGER ,
					PathID INTEGER ,
					StartRow INTEGER ,
					StartCol INTEGER ,
					EndRow INTEGER ,
					EndCol INTEGER ,
					ResourceID INTEGER ,
					ResourceName VARCHAR(50) ,
					ResourcesOccurID INTEGER ,
					Description VARCHAR(50) ,
					DBIPattern VARCHAR(50)
				 ) WITH REPLACE 
                   ON COMMIT PRESERVE ROWS
				   NOT LOGGED;

            CREATE INDEX core_IX_1 ON SESSION.core (ProgID ASC); --CLUSTER;


            INSERT INTO SESSION.core
            SELECT
                   os.ProgID,
				   os.PathID,
				   os.StartRow,
				   os.StartCol,
				   os.EndRow,
				   os.EndCol,
				   r.ResourceID,
				   r.Name AS ResourceName,
			       r.OccurID AS ResourcesOccurID,
				   st.Description,
				   dbiacc.DBIPattern
			FROM StatementReference sr
				 INNER JOIN OccurrencesStmt os ON sr.OccurID = os.OccurID
				 INNER JOIN Resources r ON sr.ResourceID = r.ResourceID
				 INNER JOIN Statements st ON sr.StatementType = st.StatementType
				 LEFT OUTER JOIN (
				                   SELECT r1.Name AS DBIPattern, sr1.OccurID
				                   FROM StatementReference sr1
							          INNER JOIN Resources r1 ON sr1.ResourceID = r1.ResourceID
							    WHERE sr1.ResourceType = 191
				                 ) dbiacc ON os.OccurID = dbiacc.OccurID
			WHERE sr.ResourceType = 190
				  AND  os.PathID IS NOT NULL;

			COMMIT;	


			BEGIN
			      COMMIT;
				  TRUNCATE TABLE cacheEZViewer_Usage_DBI IMMEDIATE ;
	              --DELETE FROM cacheEZViewer_Usage_DBI ;
	        END;

			

            LOCK TABLE  cacheEZViewer_Usage_DBI IN EXCLUSIVE MODE ;-- lock table
			INSERT INTO cacheEZViewer_Usage_DBI
			SELECT  ProgramID, ProgramName, ProgramTypeID, Ancestor,
			        pth2.PathStr AS ProgramPath, ProgStartRow, ProgStartCol, ProgEndRow, ProgEndCol,
				    Description,
				    pth1.PathStr AS StmtPathStr,
				    StatementStartRow, StatementStartColumn, StatementEndRow, StatementEndColumn,
				    ResourceID, ResourceName, OccurID, DBIPattern
			FROM (
					  SELECT DISTINCT
						    prog.ProgramID,
						    prog.ProgramName,
						    prog.ProgramTypeID,
						    prog.Ancestor,
						    prog.PathID AS ProgramPathID,
						    prog.StartRow AS ProgStartRow,
						    prog.StartCol AS ProgStartCol,
						    prog.EndRow AS ProgEndRow,
						    prog.EndCol AS ProgEndCol,
						    core.Description,
						    core.PathID AS StmtPathID,
						    core.StartRow AS StatementStartRow,
						    core.StartCol AS StatementStartColumn,
						    core.EndRow AS StatementEndRow,
						    core.EndCol AS StatementEndColumn,
						    core.ResourceID,
						    core.ResourceName,
						    core.ResourcesOccurID AS OccurID,
						    core.DBIPattern
					  FROM  SESSION.core core
						    INNER JOIN ( -- programs
									    SELECT p.ProgramID, p.ProgramName, p.ProgramTypeID, p.Ancestor,
											   occ.StartRow, occ.StartCol, occ.EndRow, occ.EndCol
											   ,occ.PathID
										  FROM (
													 SELECT pg.ProgramID,
															pg.Ancestor,
															pg.ProgramTypeID,
															pg.OccurID,
															pa.AliasName AS ProgramName
													 FROM Programs pg
														   INNER JOIN ProgramAliases pa ON pg.ProgramID = pa.ProgramId AND pa.AliasType = 0
													 WHERE pg.ProgramTypeID = 1
													       AND EXISTS (SELECT 1 FROM SESSION.core c WHERE pg.ProgramID = c.ProgID)
												)  p
												INNER JOIN Occurrences occ ON p.OccurID = occ.OccurID
										  WHERE occ.PathID IS NOT NULL
									) prog ON core.ProgID = prog.ProgramID
					  )c
					   LEFT OUTER JOIN  Paths pth1 ON pth1.PathID = c.StmtPathID
					   LEFT OUTER JOIN  Paths pth2 ON pth2.PathID = c.ProgramPathID;	
					   COMMIT;		

END 
