sábado, 16 de julio de 2011

Información de los disparadores. Oracle.

Si utilizas SQL Developer simplemente puedes ir a la pestaña "Código"
«Si utilizas SQL Developer simplemente puedes ir a la pestaña "Código"»

Para consultar información de los disparadores (triggers), utilizamos vistas del diccionario de datos como:

USER_TRIGGERS trigger pertenecientes al esquema del usuario actual.
ALL_TRIGGERS triggers sobre tablas accesibles por el usuario actual. (Si el usuario posee el privilegio CREATE ANY TRIGGER podrá ver todos los triggers de la base de datos.)
DBA_TRIGGERS todos los disparadores de la base de datos.

Tienen las mismas columnas, excepto USER_TRIGGERS la columna «owner».

Al describir por ejemplo ALL_TRIGGERS; columnas que nos daran información como: propietario, nombre del disparador, tipo, evento, propietario de la tabla, nombre de la tabla/vista, tipo de objeto base (tabla/vista), estado (enabled, disabled), código, etc.
Salida de: desc all_triggers

Solo tenemos que realizar la consulta de nuestro interes, por ejemplo:
Si estamos conectados con el usuario HR, y queremos ver los triggers que tienen las tablas pertenecientes al usuario HR (nuestro usuario); la siguiente select muestra el nombre del trigger y el propietario de éste (que sin permisos no se podría borrar dicho trigger al no pertenecernos, aunque este sobre nuestra tabla).
select   owner,trigger_name,table_name  
from    all_triggers 
where  table_owner='HR';
OWNER
-----  
TRIGGER_NAME
------------------  
TABLE_NAME
---------------
HR
SECURE_EMPLOYEES
EMPLOYEES
HR
UPDATE_JOB_HISTORY
EMPLOYEES
JP
TRIJP
EMPLOYEES
HR
TRIHR
EMPLOYEES

Si queremos ver el código del trigger, tenemos el cuerpo -solo- (trigger_body) en las vistas mencionadas; pero mejor aún si lo consultamos en ALL_SOURCE (similares: USER_SOURCE, DBA_SOURCE), donde está todo el código, no solo el cuerpo (además código de procedimientos, funciones, paquetes, disparadores).
select   text 
from    all_source 
where  name='SECURE_EMPLOYEES'  
      and owner='HR';
TEXT
------------------------------------------------------
TRIGGER secure_employees
BEFORE INSERT OR UPDATE OR DELETE ON employees
BEGIN
secure_dml;
END secure_employees;


Otros enlaces:
Web Oracle. Vistas: user_triggers, all_triggers, dba_triggers y otras más.

No hay comentarios:

Publicar un comentario