sql - 有谁知道为什么这个触发器不起作用?
问题描述
create or replace NONEDITIONABLE TRIGGER SetNapomena
BEFORE INSERT
ON stavkafakture
FOR EACH ROW
DECLARE
V_napomena VARCHAR2(20);
BEGIN
EXECUTE IMMEDIATE 'ALTER TRIGGER zabranjeno DISABLE';
SELECT napomena INTO V_napomena
FROM faktura
WHERE brojfakture =:NEW.brojfakture;
:NEW.napomena := V_napomena;
EXECUTE IMMEDIATE 'ALTER TRIGGER zabranjeno ENABLE';
END;
当我插入表(在本例中为 stavkafakture)时,我收到此错误:
无法在触发器中提交
我做了一些研究并添加了 Pragma Autonomous Transaction 和 commit,但是在添加它们之后,我尝试在表中插入一行,它永远加载并且永远不会工作。它永远处于负载状态。
有谁知道为什么?
解决方案
在 CREATE、ALTER、DROP 等 Oracle DDL 语句中生成显式提交。
IE 如果您发出这种语句,则不需要 COMMIT 或 ROLLBACK :
CREATE TABLE MyTable(MyField NUMBER);
这将创建MyTable
表并且不能回滚。这是 Oracle 的一个限制,而 PostreSQL 等其他 RDBMS 则没有。
推荐阅读
- cmake - Clion (stm32的嵌入式开发) CMake not found arm-none-eabi-gcc 编译器
- python - 用 Python 解析 C++
- pine-script - var 不会跨栏保持其值
- specflow - 如何为 Specflow 功能级模板创建插件
- microsoft-teams - URL 似乎指向 App Studio 中的预生产环境
- c++ - 我的函数是错误的,它不会返回最大节点,我不知道为什么
- ruby - 如何在 Heroku 为容器(堆栈:容器)应用程序启用 Ruby 语言运行时指标
- javascript - 将移动设备上的 URL 从“%7C”解码为“|”
- google-sites-2016 - 在 google 站点中嵌入本地 URL
- java - 如何在时间线期间在顶部设置窗格?