繁体   English   中英

pl/sql-oracle,插入前触发。 从 select 更新一些值

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM