2011-01-27 65 views
6

我知道我可以使用它创建DDL创建触发器;创建触发器只在创建新表时运行

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

问题是这个触发器会在DDLs上运行,如'Create sequence';我怎么才能执行这个'创建表'DDLs?

+0

创建表格听起来像是一个非常值得怀疑的数据库设计。 – 2011-01-27 03:26:48

+1

@OMG可能,但是肯定有时候创建表是一个很好的设计。 – jzd 2011-01-27 03:37:55

回答

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

事件的属性列表,请参阅本页面
http://ist.marshall.edu/ist480adbp/plsql_triggers.html(链路断开)

据我所知,dictionary_obj_type是 表的一个| SEQUENCE |程序|首页|功能| TYPE | PACKAGE

而dictionary_obj_name只是表/序列/ proc/etc的名称。

  • dictionary_obj_type返回发生触发触发器的DDL操作字典对象的类型。
  • dictionary_obj_name返回发生触发触发器的DDL操作的字典对象的名称。