Comunidad de diseño web y desarrollo en internet online

Problema con variables por parametro en Stored Procedure

Citar            
MensajeEscrito el 16 Oct 2008 05:43 pm
Tengo este StoredProcedure donde paso por parametro algunas variables(luego las utilizare para armar el where segun los valores de las variables); el problema esque no me reconoce las variables que paso por parametro y si les antepongo el @ a las variables por parametros no toma el valor que le paso como parametro, sino pone null:

Código :

DELIMITER $$

DROP PROCEDURE IF EXISTS `bdupld`.`Get_PLD` $$
CREATE PROCEDURE `bdupld`.`Get_PLD` (IN dia Integer,IN mes Integer,IN periodo Integer,IN tipooperacion varchar(20),IN periodotexto varchar(10))
BEGIN
SET @contador = -1;
SET @tiporeporte = 0;
SET @movimientotexto = 0;

/*SELECT @tiporeporte AS "Tipo Reporte",CAST(periodotexto AS CHAR) AS Periodotexto,CAST(CONCAT(REPEAT("0",6-LENGTH(@contador:=(@contador +1))),@contador) AS CHAR)AS Folio,IF(M.tipooperacion="D",1,IF(M.tipooperacion="P",9,IF(M.tipooperacion="R",2,0)))AS "Tipo Operacion",IF(M.instrumentomonetario="E",1,IF(M.instrumentomonetario="T",3,IF(M.instrumentomonetario="CH",4,0)))AS "Instrumento Monetario",M.Monto,CAST(DATE_FORMAT(M.fecha,"%Y%m%d") AS CHAR)As "Fecha Operacion",CAST(DATE_FORMAT(M.fecha,"%Y%m%d") AS CHAR)As "Fecha Deteccion",IF(C.pais="Mexico","Mexicana","Extranjero")AS "Nacionalidad",IF(C.tipo_cliente="Fisico",1,2)AS "Tipo de Persona",C.razon As "Razon Social",C.nombre_cliente As "Nombre",C.apellido_paterno As "Apellido Paterno",C.apellido_materno As "Apellido Materno",C.RFC,C.CURP,CAST(DATE_FORMAT(C.fecha_nacimiento,"%Y%m%d") AS CHAR)As "Fecha Nacimiento",CAST(CONCAT(C.calle," Num. Ext ",C.numero_exterior," Num. Interior ", C.numero_interior," CP. ",C.codigopostal) AS CHAR)As Domicilio,C.Colonia,C.Ciudad,C.telefono,C.actividadgiro,C.nombreapoderado As "Nombre Apoderado",C.apoderado_apellidopaterno As "Apellido Paterno Apoderado",C.apoderado_apellidomaterno As "Apellido Materno Apoderado",C.apoderado_rfc As "RFC Apoderado",C.apoderado_curp As "CURP Apoderado" FROM Movimientos M INNER JOIN Clientes C ON M.idclientes=C.idClientes  WHERE MONTH(fecha)=mes AND DAY(fecha)=dia;*/
IF tipooperacion="Relevante" THEN SET @tiporeporte=1;
ELSEIF tipooperacion="Inusual" THEN SET @tiporeporte=2;
ELSE SET @tiporeporte=3;
END IF;


SET @sql='SELECT @tiporeporte AS TipoReporte,CAST(periodotexto AS CHAR) AS Periodotexto,CAST(CONCAT(REPEAT("0",6-LENGTH(@contador:=(@contador +1))),@contador) AS CHAR)AS Folio,IF(M.tipooperacion="D",1,IF(M.tipooperacion="P",9,IF(M.tipooperacion="R",2,0)))AS TipoOperacion,IF(M.instrumentomonetario="E",1,IF(M.instrumentomonetario="T",3,IF(M.instrumentomonetario="CH",4,0)))AS InstrumentoMonetario,M.Monto,CAST(DATE_FORMAT(M.fecha,"%Y%m%d") AS CHAR)As FechaOperacion,CAST(DATE_FORMAT(M.fecha,"%Y%m%d") AS CHAR)As FechaDeteccion,IF(C.pais="Mexico","Mexicana","Extranjero")AS Nacionalidad,IF(C.tipo_cliente="Fisico",1,2)AS "Tipo de Persona",C.razon As "Razon Social",C.nombre_cliente As "Nombre",C.apellido_paterno As "Apellido Paterno",C.apellido_materno As "Apellido Materno",C.RFC,C.CURP,CAST(DATE_FORMAT(C.fecha_nacimiento,"%Y%m%d") AS CHAR)As "Fecha Nacimiento",CAST(CONCAT(C.calle," Num. Ext ",C.numero_exterior," Num. Interior ", C.numero_interior," CP. ",C.codigopostal) AS CHAR)As Domicilio,C.Colonia,C.Ciudad,C.telefono,C.actividadgiro,C.nombreapoderado As "Nombre Apoderado",C.apoderado_apellidopaterno As "Apellido Paterno Apoderado",C.apoderado_apellidomaterno As "Apellido Materno Apoderado",C.apoderado_rfc As "RFC Apoderado",C.apoderado_curp As "CURP Apoderado" FROM Movimientos M INNER JOIN Clientes C ON M.idclientes=C.idClientes  WHERE MONTH(fecha)=mes AND DAY(fecha)=dia;';
PREPARE query FROM @sql;
EXECUTE query;
/*SELECT CAST(@sql AS CHAR) As Query;*/


END $$

DELIMITER ;

Y lo llamo asi:

Código :

CALL Get_PLD('%',10,2008,'Relevante','052008');

Por Jorgelig

Claber

3035 de clabLevel

12 tutoriales

 

Monterrey, Nuevo Leon, MX

firefox
Citar            
MensajeEscrito el 16 Oct 2008 06:07 pm
Si no pongo la @ antes del nombre de las variables que paso por parametro este es el error que me marca:

Código :

Unknown column '<nombreprimervariabledelsqueryquenotenga@>' in 'field list'

Por Jorgelig

Claber

3035 de clabLevel

12 tutoriales

 

Monterrey, Nuevo Leon, MX

firefox
Citar            
MensajeEscrito el 16 Oct 2008 06:19 pm
gracias a mi compañero de oficina dilucidamos el posible error
a la variable sql le ingresas como texto la siguiente consulta

Código PHP :

SET @sql='SELECT @tiporeporte AS TipoReporte,  // etc...


en ves de concatenar las variables con el texto para que asuma correctamente los valores

Código PHP :

SET @sql='SELECT '+@tiporeporte+' AS TipoReporte,  // etc...


PD, ademas encontramos otro error de una variable que no era antecedida por el @ , esa te la dejo para que la busques

Por Inyaka

Claber

3176 de clabLevel

9 tutoriales
2 articulos

Genero:Masculino   Desarrollador de GAIA

Programador y fotógrafo

firefox
Citar            
MensajeEscrito el 16 Oct 2008 06:33 pm
Gracias Inyaka, cambie la linea que me comentas por esta:

Código :

SET @sql='SELECT @tiporeporte AS TipoReporte,CAST(' + @periodotexto +' AS CHAR) AS Periodotexto,CAST(CONCAT(REPEAT("0",6-LENGTH(@contador:=(@contador +1))),@contador) AS CHAR)AS Folio,IF(M.tipooperacion="D",1,IF(M.tipooperacion="P",9,IF(M.tipooperacion="R",2,0)))AS TipoOperacion,IF(M.instrumentomonetario="E",1,IF(M.instrumentomonetario="T",3,IF(M.instrumentomonetario="CH",4,0)))AS InstrumentoMonetario,M.Monto,CAST(DATE_FORMAT(M.fecha,"%Y%m%d") AS CHAR)As FechaOperacion,CAST(DATE_FORMAT(M.fecha,"%Y%m%d") AS CHAR)As FechaDeteccion,IF(C.pais="Mexico","Mexicana","Extranjero")AS Nacionalidad,IF(C.tipo_cliente="Fisico",1,2)AS "Tipo de Persona",C.razon As "Razon Social",C.nombre_cliente As "Nombre",C.apellido_paterno As "Apellido Paterno",C.apellido_materno As "Apellido Materno",C.RFC,C.CURP,CAST(DATE_FORMAT(C.fecha_nacimiento,"%Y%m%d") AS CHAR)As "Fecha Nacimiento",CAST(CONCAT(C.calle," Num. Ext ",C.numero_exterior," Num. Interior ", C.numero_interior," CP. ",C.codigopostal) AS CHAR)As Domicilio,C.Colonia,C.Ciudad,C.telefono,C.actividadgiro,C.nombreapoderado As "Nombre Apoderado",C.apoderado_apellidopaterno As "Apellido Paterno Apoderado",C.apoderado_apellidomaterno As "Apellido Materno Apoderado",C.apoderado_rfc As "RFC Apoderado",C.apoderado_curp As "CURP Apoderado" FROM Movimientos M INNER JOIN Clientes C ON M.idclientes=C.idClientes  WHERE MONTH(fecha)='+@mes+' AND DAY(fecha)='+@dia+';';

Y si no le pongo la @ a las variables que paso por parametro me sale este error:

Código :

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '52018' at line 1

Por Jorgelig

Claber

3035 de clabLevel

12 tutoriales

 

Monterrey, Nuevo Leon, MX

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.