Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   MySQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=21)
-   -   Trigger con funcion CONCAT_WS (https://www.clubdelphi.com/foros/showthread.php?t=95529)

Jose Roman 15-01-2022 06:38:35

Trigger con funcion CONCAT_WS
 
Cordial saludo,
Tengo una tabla donde deseo que se guarde los INSERT, UPDATE y DELETE que hace el usuario que ingrese al sistema, esto para guardar una auditoria de quien hizo cualquier modificación en las tablas.

Código SQL [-]
  CREATE TABLE reg_mod (
  ID_REG timestamp NOT NULL,
  ID_USR varchar(15) NOT NULL,
  TP_OPE char(1) NOT NULL COMMENT 'I - INSERT  U - UPDATE  D - DELETE',
  NB_TAB varchar(7) NOT NULL COMMENT 'NOMBRE TABLA',
  PK_COL varchar(15) NOT NULL COMMENT 'VALOR PRIMARY KEY',
  RG_ANT text,
  RG_NEW text,
  PRIMARY KEY (ID_REG,ID_USR))

Para guardar los cambios lo hago con este procedimiento almacenado:

Código SQL [-]
 
    DELIMITER $$
    CREATE PROCEDURE REG_HIS(IN vHOR TIMESTAMP, IN vUSR VARCHAR(15), IN vOPE CHAR(1), IN vTAB VARCHAR(7),
                             IN vCLA VARCHAR(15), IN vOLD TEXT, IN vNEW TEXT)
    BEGIN
      INSERT INTO reg_mod (ID_REG,ID_USR,TP_OPE,NB_TAB,PK_COL,RG_ANT,RG_NEW) 
                   VALUES (vHOR,vUSR,vOPE,vTAB,vCOL,vCLA,vCLV,vOLD,vNEW);
    END$$
    DELIMITER ;

En cada tabla pienso hacer un TRIGGER BEFORE UPDATE, BEFORE INSERT y BEFORE DELETE que me guarde la información que deseo en la tabla reg_mod, como por ejemplo de una tabla llamada LISTA:

Código SQL [-]
DELIMITER $$
CREATE TRIGGER `BI_LISTA` BEFORE INSERT ON `lista`
 FOR EACH ROW BEGIN
  DECLARE vUSR VARCHAR(15);
# SE UBICA EL USUARIO QUE INICIO SESION PERO SOLO SE EXTRAE EL NOMBRE QUE TENGA ANTES DEL @
  SET vUSR = LEFT(SESSION_USER(),LOCATE('@',SESSION_USER(),1) - 1);
  CALL REG_HIS(NOW(),vUSR,'I','LISTA',new.id_lis,NULL,CONCAT_WS(char(10 using utf8),CONCAT('ID_LIS = ',new.id_lis),CONCAT('DESCRI= ',new.descri));
END$$
DELIMITER ;

Pero esto me genera el siguiente error en phpmyadmin:

Código SQL [-]
Error
consulta SQL: Copiar


CREATE TRIGGER `BI_LISTA` BEFORE INSERT ON `lista`
 FOR EACH ROW BEGIN
  DECLARE vUSR VARCHAR(15);
# SE UBICA EL USUARIO QUE INICIO SESION PERO SOLO SE EXTRAE EL NOMBRE QUE TENGA ANTES DEL @
  SET vUSR = LEFT(SESSION_USER(),LOCATE('@',SESSION_USER(),1) - 1);
  CALL REG_HIS(NOW(),vUSR,'I','LISTA',new.id_lis,NULL,CONCAT_WS(char(10 using utf8),CONCAT('ID_LIS = ',new.id_lis),CONCAT('DESCRI= ',new.descri));
END
MySQL ha dicho: Documentación

#1064 - Algo está equivocado en su sintax cerca ';
END' en la linea 6

En este trigger solo estoy tratando de guardar dos campos de una tabla en RG_NEW por ser un INSERT, habrán tablas en las que hayan mas campos para guardar en REG_MOD y necesito que se guarde con salto de linea dos mas registros en REG_ANT (si es un UPDATE o DELETE) o en REW_NEW (si es un INSERT o UPDATE), de esta manera:



Cual es el error que me esta generando el trigger?


La franja horaria es GMT +2. Ahora son las 20:09:22.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi