oracle - ORA-04092: 在超过每日申请数量后无法在触发器中回滚
问题描述
如果假设有申请人,职位,申请关系和申请就像关联类,我可以知道如何编写触发器,因为申请人可以申请许多职位,一个职位可以被许多申请人申请,并且申请关系有自己的名为 dateApp 的属性,我想将申请数量限制为一天两次,因此这意味着客户一天只能申请 2 件商品。到目前为止,我有这个代码:
CREATE OR REPLACE TRIGGER APPLYTWICEONLY
AFTER INSERT ON APPLIES
DECLARE
CURSOR C IS
SELECT ANUMBER, COUNT(APPDATE) AS TOTAL
FROM APPLIES
WHERE APPDATE = TRUNC(SYSDATE)
GROUP BY ANUMBER;
BEGIN
FOR APPLY IN C
LOOP
IF APPLY.TOTAL > 2 THEN
DBMS_OUTPUT.PUT_LINE('AN APPLICANT CAN APPLY MAXIMUM TWICE A DAY.');
ROLLBACK;
END IF;
END LOOP;
END;
/
所以这里发生的事情是,在申请人申请职位后,我使用该号码检查每个申请人今天提出的申请总数,如果今天申请人的申请总数超过 2,那么我将回滚并撤消该插入。我想使用语句触发器而不是行触发器来执行此操作,但是在申请人超过当天的申请数量后,我不断收到 ORA-04092: cannot ROLLBACK in a trigger。有人能帮我吗?
解决方案
您不能在触发器中运行 COMMIT 或 ROLLBACK:
$ oerr ora 4092
04092, 00000, "cannot %s in a trigger"
// *Cause: A trigger attempted to commit or rollback.
// *Action: Rewrite the trigger so it does not commit or rollback.
$
推荐阅读
- c++ - 我如何修改枚举,使其在一个函数中只能有 2 个可能的值?C++
- r - 变异多个逗号分隔的变量
- postgresql - 是否可以使用 AVG 函数从具有 UNION 的子查询中给出 2 个结果的平均值?
- sql - 子查询-case when-subselect-group by-count
- macos - 在 MacOS m1 Monterey 上安装软件包
- r - 如何将嵌套的 txt/json 转换为 R 中的“正确”数据框
- ibm-cloud - IBM Cloud 帐户已停用
- asp.net-web-api2 - AAD 身份验证后,我的 webAPI 在 http 而不是 https 上重定向
- amazon-web-services - 无法恢复 AWS EC2 公共 IP 地址
- powershell - 如何在 Windows Server Core 中设置默认 Powershell 版本