使用 RAISE 创建触发器

Posted

技术标签:

【中文标题】使用 RAISE 创建触发器【英文标题】:Create triggers with RAISE 【发布时间】:2014-04-07 16:55:58 【问题描述】:

我正在尝试将表限制为仅一条记录并禁用所有添加更多记录的尝试。 我创建了这个触发器:CREATE TRIGGER abort_insert_to_my_tbl BEFORE INSERT ON my_tbl BEGIN RAISE(ABORT,"You can't add records to my_tbl") END;

但我不断收到此错误:

Error: near line 3080: near "RAISE": syntax error  

我做错了什么?

【问题讨论】:

【参考方案1】:

正如documentation 所示,RAISE 是一个函数,而不是语句,因此不能直接在触发器主体中使用。

要在语句中使用函数,例如使用 SELECT 语句:

CREATE TRIGGER abort_insert_to_my_tbl
BEFORE INSERT ON my_tbl
BEGIN
    SELECT RAISE(ABORT, 'You can''t add records to my_tbl');
END;

【讨论】:

以上是关于使用 RAISE 创建触发器的主要内容,如果未能解决你的问题,请参考以下文章

ORA-4088、ORA-6512 使用触发器和 RAISE_APPLICATION_ERROR

为啥不允许在 PL/SQL 触发器中使用 ROLLBACK 语句,但 RAISE_APPLICATION_ERROR 是?

使用 raise_application_error 的 PL SQL 触发器会引发错误。

触发 RAISE_APPLICATION_ERROR 但执行内部命令

Oracle创建禁止DDL的触发器

RAISE_APPLICATION_ERROR 问题