创建仅在创建新表时运行的触发器
Posted
技术标签:
【中文标题】创建仅在创建新表时运行的触发器【英文标题】:Creating a trigger to only run when a new table is being created 【发布时间】:2011-06-16 07:01:49 【问题描述】:我知道我可以用它来创建 DDL 创建触发器;
CREATE OR REPLACE TRIGGER
create_table_trigger
AFTER CREATE ON SCHEMA
DECLARE
BEGIN
END;
问题是这个触发器会在像“创建序列”这样的 DDL 上运行;我怎样才能只为“创建表”DDL 执行此操作?
【问题讨论】:
创建表听起来像是一个非常值得怀疑的数据库设计。 @OMG 可能,但在某些时候创建表格肯定是一个好的设计。 @OMG,我曾开发过一个为零售店生成订单的应用程序。订单数据通常为 500,000 行,每天生成数百个订单。对于每个订单,都会创建一个新表并存储数据。 【参考方案1】: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 是其中之一 表|序列|过程|索引|功能|类型|包
而dictionary_obj_name就是表/序列/proc/etc的名字。
dictionary_obj_type 返回发生触发触发器的 DDL 操作所在的字典对象的类型。 dictionary_obj_name 返回发生触发触发器的 DDL 操作所在的字典对象的名称。【讨论】:
哦,还有,我怎样才能得到正在创建的表的名称? 我收到以下错误..(1064,“您的 SQL 语法有错误;请查看与您的 mysql 服务器版本相对应的手册,以了解在 'TRIGGER create_table_trigger AFTER ALTER 附近使用的正确语法ON SCHEMA BEGIN IF DICTIONARY_OBJ_T' 在第 1 行") @VeereshP 这是一个 oracle 解决方案,而不是 MySQL。以上是关于创建仅在创建新表时运行的触发器的主要内容,如果未能解决你的问题,请参考以下文章