sql >> Base de Datos >  >> RDS >> Oracle

desencadenar si más

La sintaxis PL/SQL no permite incluir sentencias SQL en la cláusula IF.

El enfoque correcto es separar la declaración SELECT y luego probar su resultado. Así que eso sería:

create or replace trigger trig1 
after insert on table_1 
for each row 
declare
    v table2.column2%type;
begin
    select table2.column2 
    into v
    from table2 
    where table2.id= :new.id;

    if v is null
    then 
        update table2 
        set table2.column2 = :new.column1 
        where table2.id = :new.id; 
    end if; 
end trig1;

Tenga en cuenta que esto no maneja la existencia de múltiples filas en table2 coincidiendo con los criterios, o de hecho no hay filas coincidentes. Tampoco maneja el bloqueo.

Además, tenga en cuenta que un código como este no funciona bien en entornos multiusuario. Es por eso que mencioné el bloqueo. Realmente debería usar la lógica de procedimiento para manejar este tipo de requisitos. Aunque, como suele ocurrir con los activadores mal concebidos, el verdadero culpable es un modelo de datos deficiente. table2.column2 debería haber sido normalizado fuera de existencia.