merge

Oracle - Merge dentro de un trigger

Foros IT

Hola a todos,

Esta es la tabla que voy a utilizar para el trigger: 

CREATE TABLE "grace_period" (
"id" NUMBER(11) PRIMARY KEY NOT NULL,
"id_user" NUMBER(20) NOT NULL,
"date_limit" DATE NOT NULL,
"active" NUMBER(11),
"created_at" DATE NOT NULL,
"updated_at" DATE
);

Y lo que me gustaría hacer es crear un TRIGGER BEFORE INSERT que comprobara si la nueva entrada ya contiene ese "id_user" o no. 

Si existe "id_user" entonces hacer una actualización de la columna "active" de ese "id_user" y si no existe, deberá insertar una nueva fila. 

¿Podría alguien ayudarme? es la primera vez que trato de hacer una fusión en un disparador y un merge.

Gracias

 

Merge lento

Foros IT

carlos consulta, estoy ejecutando un merge ,pero tarda demasiado noce a que se debe, el merge llena los datos de un select ,ese select me muestra rapido la info , pero para insertar a la tabla destino se demora una eternidad . ayuda gracias pongo el merge :

 

create or replace

PROCEDURE SP_MERGE_FACT_ALUMNOPRUE AUTHID CURRENT_USER

IS

BEGIN

 

  ------------------------------

  --OSILDM.FACT_ALUMNOPERIODO--

  ------------------------------

 

  MERGE /*+ APPEND */ INTO MRIVERA.FACT_ALUMNOPERIODOPRUE I

  USING(SELECT

 L3.ID_INSTITUCION,

 L3.ID_GRUPOPROGRAMA,

 L2.ID_GRUPOPRODUCTO,

 L1.ID_PRODUCTO,

 L5.ID_SEDE,

 CASE

WHEN T4.GFORMAINGRESO=8

THEN

Tips para realizar UPSERTs o updates con insert en SQL Server

Merge SQL

En muchas ocasiones, especialmente en procesos ETL o de carga de datos para un data warehouse, por ejemplo, interesa hacer en una sola sentencia o en un solo paso la comprobación de si un registro existe, y si existe actualizarlo, y si no insertarlo. A esta combinación se le ha apodado UPSERT, aunque en SQL existe una sentencia específica para hacerlo, que es MERGE.