es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

El Trigger Compuesto está siendo activado solamente una vez.

Tengo un esquema habilitado para ORDS que acepta registros JSON masivos y los divide uno por uno, e inserta uno por uno en la tabla UEM.

He intentado crear un desencadenador que recupere el ID de la última fila insertada y utilice ese valor para insertarlo en otra tabla. El problema es que el desencadenador a continuación solo recupera e inserta el ID de la última fila insertada, y solo realiza una inserción.

Para ser más específicos:

1) ORDS obtiene un paquete JSON masivo que consta de 4 registros.

2) El controlador POST inicia un procedimiento que divide estos 4 registros por salto de línea, e inmediatamente los inserta en las columnas CLOB de la tabla UEM como 4 filas separadas usando “connect by level”. También está la columna ID que se crea automáticamente e incrementa.

3) Paralelamente, también me gustaría obtener la ID de estas filas y usarla en otra inserción de tabla. He creado el disparador compuesto a continuación, pero este disparador solo recupera la ID del último registro e inserta solo una fila.

¿Por qué crees que se comporta así? Al final, el procedimiento “insertó” 4 registros.

CREAR DESENCADENADOR TEST_TRIGGER5
PARA INSERTAR EN UEM
DESATIVAR DESACOPLAMIENTO
lastid NUMBER;
DESPUÉS DE LA DECLARACIÓN ES
COMENZAR
   SELECCIONE MAX (ID) EN lastid DE UEM;
        INSERT INTO SPRINT1 (tenantid, usersessionid, newuser, totalerrorcount, userid) VALUES (& # 39; deneme & # 39 ;, & # 39; testsessionid & # 39 ;, & # 39; sí & # 39 ;, lastid, & # 39; asdasfqwqwe & # 39;);
    END DESPUÉS DEL ESTADO;
FINAL TEST_TRIGGER5;

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    El desencadenador solo recupera el ID del último registro e inserta solo una fila porque es un desencadenador AFTER STATEMENT. Esto significa que se activa solo una vez después de que la declaración de inserción completa haya finalizado.

    En el caso del escenario descrito, la declaración de inserción inserta 4 filas, pero el desencadenador solo se activa una vez, por lo tanto, solo recupera el ID de la última fila insertada e inserta una fila en la tabla SPRINT1.

    Para recuperar el ID de cada fila insertada e insertar una fila correspondiente en la tabla SPRINT1, debe usarse un desencadenador FOR EACH ROW. Este desencadenador se activa una vez por cada fila que se inserta y permite acceder a los valores de la fila que se está insertando.

    El desencadenador debe modificarse de la siguiente manera:

    CREATE OR REPLACE TRIGGER TEST_TRIGGER5
    FOR INSERT ON UEM
    COMPOUND TRIGGER
        AFTER EACH ROW IS
            BEGIN
                INSERT INTO SPRINT1 (tenantid, usersessionid, newuser, totalerrorcount, userid) 
                    VALUES ('deneme', 'testsessionid', 'yes', :new.id, 'asdasfqwqwe');
            END AFTER EACH ROW;
    END TEST_TRIGGER5;
    

    Ahora, este desencadenador insertará una fila en la tabla SPRINT1 por cada fila que se inserte en la tabla UEM, utilizando el valor ID de la fila recién insertada.

Comments are closed.