Ejemplo: Recuperar texto de sentencia para una rutina

Puede utilizar la supervisión de rutinas para recuperar las sentencias ejecutadas por una rutina.

Escenario

En este ejemplo, un administrador de base de datos (DBA) está investigando manualmente las costosas sentencias ejecutadas por una rutina. Como parte de la investigación puede ser útil vincular una fila en MON_GET_ROUTINE_EXEC_LIST a una sentencia o línea específica de la rutina. La obtención del texto de la sentencia para rutinas de corta duración como bloques anónimos, sentencias SQL dinámicas o rutinas externas se realiza recuperando la sentencia de la caché del paquete. La siguiente consulta vincula una fila de MON_GET_ROUTINE_EXEC_LIST a una sentencia específica:
SELECT
   A.ROUTINETYPE, A.ROUTINESCHEMA, A.ROUTINENAME,
   A.SECTION_TYPE, A.SECTION_NUMBER, A.STMTNO, 
   SUBSTR(B.STMT_TEXT,1,160)
FROM
   TABLE(MON_GET_ROUTINE_EXEC_LIST('P','DRICARD',NULL,'PROC1',-1)) AS A, 
   TABLE(MON_GET_PKG_CACHE_STMT(NULL,NULL,NULL,-1)) AS B
WHERE
   A.EXECUTABLE_ID=B.EXECUTABLE_ID
El resultado devuelto es el siguiente:
STMT_TEXT                                   
 --------------------------------------------
WITH GET_UPDATE_LIST (COL1, COL2STATS) AS AF
insert into T1 values(3,'d','d','d')        
call SYSIBMSUBROUTINE.P1_66613_1157394573() 

  3 record(s) selected.
Nota: Si una sentencia SQL dinámica o una sentencia de rutina externa es devuelta por MON_GET_ROUTINE_EXEC_LIST y el executable_id asociado ya no está en la caché del paquete, ese texto de sentencia no puede ser recuperado a menos que se haya utilizado un monitor de eventos para registrar esta información. El ciclo de actualización del producto InfoSphere® Optim Performance Manager le permite recuperar esta información en la mayoría de los casos.
Para sentencias SQL compiladas y rutinas en línea, el texto de la sentencia se puede encontrar utilizando el paquete y la información de la sentencia que devuelve MON_GET_ROUTINE_EXEC_LIST. Por ejemplo:
SELECT  RS.ROUTINETYPE, RS.ROUTINESCHEMA, RS.ROUTINENAME,
   RS.SECTION_NUMBER, RS.STMTNO, SUBSTR(SS.TEXT,1,160)
FROM
   TABLE(MON_GET_ROUTINE_EXEC_LIST('F','DRICARD','','MYFUNC',-1)) AS RS,
   SYSIBM.SYSSTMT SS
WHERE 
   RS.SECTION_TYPE = 'S'
    AND SS.PLNAME = RS.PACKAGE_SCHEMA
    AND SS.PLCREATOR = RS.PACKAGE_NAME
    AND SS.STMTNO = RS.STMTNO
    AND SS.SECTNO = RS.SECTION_NUMBER
El resultado devuelto es el siguiente:
STMT_TEXT                                   
 --------------------------------------------
insert into MYTABLE values('1')        

  1 record(s) selected.