创建一个触发器,仅在创建新表时运行

8

我知道可以使用这个来创建DDL create trigger;

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

问题是这个触发器会在像“创建序列”的DDL上运行;我该如何仅对“创建表”DDL执行此操作?


创建一个表听起来像是一个非常可疑的数据库设计。 - OMG Ponies
1
可能有时候创建表是一个很好的设计,但不一定总是如此。 - jzd
@天啊,我曾经开发过一个应用程序,用于为零售店生成订单。订单数据通常有500,000行,每天会生成数百个订单。为每个订单创建一个新表并存储数据。 - jzd
1个回答

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

要查看EVENT属性列表,请参考此页面:
http://ist.marshall.edu/ist480adbp/plsql_triggers.html(链接已失效)

可以使用Wayback机器人来访问上述失效链接的内容: https://web.archive.org/web/20110809071133/http://ist.marshall.edu/ist480adbp/plsql_triggers.html

据我所知,dictionary_obj_type是以下类型之一:TABLE|SEQUENCE|PROCEDURE|INDEX|FUNCTION|TYPE|PACKAGE

而dictionary_obj_name仅是表/序列/过程等的名称。

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

哦,还有,我怎么能获取正在创建的表的名称? - Tolga E
我遇到了以下错误.. (1064, "您的SQL语法有误,请检查与您的MySQL服务器版本相对应的手册,以获取正确的语法使用方式,位于第1行附近:'TRIGGER create_table_trigger AFTER ALTER ON SCHEMA BEGIN IF DICTIONARY_OBJ_T'") - Veeresh P
@VeereshP 这是一个Oracle解决方案,不是MySQL。 - saritonin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接