MySQL - Procedimiento para un trigger

 
Vista:
sin imagen de perfil

Procedimiento para un trigger

Publicado por Alejandro (13 intervenciones) el 14/03/2009 14:05:49
Hola

Estoy probando este codigo que saque de http://www.go4expert.com/forums/showthread.php?t=7252

CREATE PROCEDURE `add_tblAudit`(IN pUserId VARCHAR(50), IN pTableName VARCHAR(50), IN pFieldName VARCHAR(50), IN pOldValue LONGTEXT, IN pNewValue LONGTEXT)
BEGIN

INSERT INTO `tblAudit` (`UserName`, `TableName`, `FieldName`, `OldValue`, `NewValue`)
VALUES (pUserName, pTableName, pFieldName, pOldValue, pNewValue);
RETURN LAST_INSERT_ID() AS `AuditId`;

END;$$

y la linea "RETURN LAST_INSERT_ID() AS `AuditId`;" me da el error 1064
alguna ayuda?

Alejandro
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 2
Ha aumentado su posición en 58 puestos en MySQL (en relación al último mes)
Gráfica de MySQL

RE:Procedimiento para un trigger

Publicado por Emerson Palacios (29 intervenciones) el 14/03/2009 15:13:26
El Return solo se utiliza en funciones y sirve precisamente para retornar un valor resultante de una funcion, borra esa linea de codigo a ver como te va. Eso es un Procedimiento almacenado no un trigger creo que estas un poco confundido. cualquier cosa no dudes en preguntar. nos vemos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

RE:Procedimiento para un trigger

Publicado por Alejandro (13 intervenciones) el 14/03/2009 15:57:54
Si, ya vi eso
Cambie a FUNCTION y el error es el mismo
Este procedimiento es llamado por un trigger, si podes fijate el link que referencie en el post inicial.
Gracias por responder, espero tu respuesta

Alejandro
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 2
Ha aumentado su posición en 58 puestos en MySQL (en relación al último mes)
Gráfica de MySQL

RE:Procedimiento para un trigger

Publicado por Emerson Palacios (29 intervenciones) el 14/03/2009 16:21:04
Bueno aca veras como se hace una funcion (http://www.nosolocodigo.com/como-crear-funciones-en-mysql) si solo has cambiado el Procedure por function en tu codigo me parece que te faltaria el returns algo asi seria la creacion de tu funcion "CREATE FUNCTION add_tblAudit(pUserId VARCHAR(50),pTableName VARCHAR(50),pFieldName VARCHAR(50),pOldValue LONGTEXT, pNewValue LONGTEXT) RETURNS VARCHAR(20) " en el returns debes poner el tipo de dato que te retornara la funcion. Lo que no estoy muy seguro es si se puede hacer insert dentro de una funcion porque selects no se puede hacer lo que te aconsejaria mejor es hacer todo lo que hace esta funcion dentro del trigger. o si no explica que tipo de problema tienes para encontrar una solucion mas sencilla.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Procedimiento para un trigger

Publicado por Emiliano (98 intervenciones) el 14/03/2009 20:05:45
Hace esto

CREATE PROCEDURE `add_tblAudit`(IN pUserId VARCHAR(50), IN pTableName VARCHAR(50), IN pFieldName VARCHAR(50), IN pOldValue LONGTEXT, IN pNewValue LONGTEXT)
BEGIN

INSERT INTO `tblAudit` (`UserName`, `TableName`, `FieldName`, `OldValue`, `NewValue`)
VALUES (pUserName, pTableName, pFieldName, pOldValue, pNewValue);

Set @a = 0;

SELECT LAST_INSERT_ID() as @a;

END;$$
//--------------------------------------------------------------------------------------------------------
Y despues en el cliente haces

CALL add_tblAudit(.....,.....,.....);

SELECT @a;

@a son variables globales por cliente;
puede ser @a, @b, @loquesea

Suerte espero que te sirva;
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar