![](/img/trans.png)
[英]trigger function is not executing in Oracle pl/sql before insert or update
[英]pl/sql-oracle, trigger before insert. Update some values from a select
我是 oracle 的新手,我遇到了一个需要在插入行之前更新一些值的触发器,这些值需要从 select 获取。 我很困惑何时使用 NO_DATA_FOUND 或 SQL%FOUND 来防止 select 语句中的 no data found 异常,特别是在获得多个值的 select 中,其中一些可能是 Z37A6259CC0C1DAFFAE2999CC0C1DAFFAE2999A7
这是我现在拥有的代码,但出现错误:
create or replace NONEDITIONABLE TRIGGER IS_INSERT_OSCILOSPROTECCION_RELE
BEFORE INSERT ON IS_OSCILOSPROTECCION
referencing OLD as old NEW as new
FOR EACH ROW
DECLARE
v_IDMODELORELE VARCHAR2(50);
v_IDRELE VARCHAR2(50);
v_NOMBRERELE VARCHAR2(50);
v_DESCRIPCIONRELE VARCHAR2(200);
v_NUMEROSERIERELE VARCHAR2(50);
BEGIN
BEGIN
select IDRELE into v_IDRELE from IS_PROTECCION where IDPROTECCION = :new.IDPROTECCION;
EXCEPTION WHEN NO_DATA_FOUND THEN
v_IDRELE := NULL;
END;
IF v_IDRELE is not null THEN
select IDMODELORELE, NOMBRE, DESCRIPCION, NUMEROSERIE into v_IDMODELORELE, v_NOMBRERELE, v_DESCRIPCIONRELE, v_NUMEROSERIERELE from RELE where IDRELE = v_IDRELE;
IF SQL%FOUND THEN
:new.IDMODELORELE := v_IDMODELORELE;
:new.NOMBRERELE := v_NOMBRERELE;
:new.DESCRIPCIONRELE := v_DESCRIPCIONRELE;
:new.NUMEROSERIERELE := v_NUMEROSERIERELE;
END IF;
END IF;
END;
错误报告 - ORA-00604: 递归 SQL 级别 1 发生错误 ORA-12954: 请求超过允许的最大数据库大小 12 GB。 00604. 00000 - “错误发生在递归 SQL 级别 %s”
您很可能使用的是 XE 版本的 Oracle,并且您试图超过它支持的最大数据量。 您的触发器没有任何问题 - 您只是没有空间容纳更多数据,因此插入失败。
您将需要从同一个表中删除一些数据,或者通过释放其他未使用的空间来减小表空间的大小。 以下文章有关于如何回收未使用空间的想法: https://oracle-base.com/articles/misc/reclaiming-unused-space
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.