2011-01-27 9 views
6

Sé que puedo usar esto para crear el desencadenador DDL create;Crear un desencadenador para ejecutar solo cuando se está creando una nueva tabla

CREATE OR REPLACE TRIGGER 
    create_table_trigger 
    AFTER CREATE ON SCHEMA 
DECLARE 
BEGIN 
END; 

El problema es que este desencadenador se ejecutará en DDL como 'Crear secuencia'; ¿Cómo solo puedo ejecutar esto para los DDL 'Crear tabla'?

+0

Crear una tabla suena como un diseño de base de datos muy cuestionable. –

+1

@OMG posiblemente, pero definitivamente hay momentos en los que crear tablas es un buen diseño. – jzd

+0

@jzd: tengo un ejemplo? –

Respuesta

13
CREATE OR REPLACE TRIGGER 
    create_table_trigger 
    AFTER CREATE ON SCHEMA 
BEGIN 
    IF SYS.DICTIONARY_OBJ_TYPE = 'TABLE' THEN 
     .... 
END; 

Para una lista de atributos de evento, consulte esta página
http://ist.marshall.edu/ist480adbp/plsql_triggers.html (enlace está inactivo)

Por lo que yo sé, dictionary_obj_type es uno de TABLA | SECUENCIA | PROCEDIMIENTO | ÍNDICE | FUNCIÓN | TYPE | PAQUETE

Y dictionary_obj_name es solo el nombre de la tabla/sequence/proc/etc.

  • dictionary_obj_type Devuelve el tipo del objeto de diccionario en el que se produjo la operación DDL que disparó el gatillo.
  • dictionary_obj_name Devuelve el nombre del objeto de diccionario en el que se produjo la operación DDL que activó el desencadenador.
+0

Booya ... Gracias –

+0

Ah, también, ¿cómo puedo obtener el nombre de la tabla que se está creando? –

+0

He actualizado la respuesta con un enlace – RichardTheKiwi

Cuestiones relacionadas