Ver Mensaje Individual
  #10 (permalink)  
Antiguo 01/03/2011, 06:49
cgonzalezc
 
Fecha de Ingreso: marzo-2011
Mensajes: 23
Antigüedad: 13 años, 8 meses
Puntos: 0
Respuesta: Resultado null de una select en un procedimiento almacenado

Aqui al función.

DELIMITER $$

DROP FUNCTION IF EXISTS `CUR` $$
CREATE DEFINER=`root`@`%` FUNCTION `CUR`() RETURNS int(4)
BEGIN
DECLARE PRUEBA INT(4) DEFAULT 999;

DECLARE done INT DEFAULT 0;
DECLARE ANYTRA INT(4);
DECLARE W_ANYTRA INT(4);
DECLARE MESTRA int(2);
DECLARE NOMMES varchar(15);
DECLARE NCUENTA varchar(30);
DECLARE NOMCLIENTE varchar(255);
DECLARE CODREPRE varchar(20);
DECLARE NOMREPRE varchar(50);
DECLARE MES_ACTUAL_IMP float(15,2);
DECLARE MES_ACTUAL_CANT float(15,2);
DECLARE IMPBRU float(11,2);
DECLARE DTOFAM float(11,2);
DECLARE DTOART float(11,2);
DECLARE DTOCAB float(11,2);
DECLARE DTOOTR float(11,2);
DECLARE PRECIO float(11,2);
DECLARE PRECOS float(11,2);
DECLARE VAR_MES_ANT_IMP float(15,2);
DECLARE VAR_MES_ANT_IMP_PCT float(10,2);
DECLARE VAR_MES_ANT_CANT float(15,2);
DECLARE VAR_MES_ANT_CANT_PCT float(10,2);
DECLARE VAR_FIN_ANY_IMP float(15,2);
DECLARE VAR_FIN_ANY_IMP_PCT float(10,2);
DECLARE VAR_FIN_ANY_CANT float(15,2);
DECLARE VAR_FIN_ANY_CANT_PCT float(10,2);
DECLARE VAR_INTERANUAL_IMP float(15,2);
DECLARE VAR_INTERANUAL_IMP_PCT float(10,2);
DECLARE VAR_INTERANUAL_CANT float(15,2);
DECLARE VAR_INTERANUAL_CANT_PCT float(10,2);
DECLARE VAR_PRESUPUESTO_IMP float(15,2);
DECLARE VAR_PRESUPUESTO_IMP_PCT float(10,2);
DECLARE VAR_PRESUPUESTO_CANT float(15,2);
DECLARE VAR_PRESUPUESTO_CANT_PCT float(10,2);




DECLARE CUR_VENTAS_CLIENTE_REPRE CURSOR FOR
SELECT *
FROM VENTAS_CLIENTE_REPRE_BACKUP;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;


OPEN CUR_VENTAS_CLIENTE_REPRE;

REPEAT
FETCH CUR_VENTAS_CLIENTE_REPRE INTO ANYTRA,MESTRA,NOMMES,NCUENTA,NOMCLIENTE,CODREPRE,N OMREPRE,MES_ACTUAL_IMP,MES_ACTUAL_CANT,IMPBRU,DTOF AM,DTOART,DTOCAB,DTOOTR,PRECIO,PRECOS,VAR_MES_ANT_ IMP,vAR_MES_ANT_IMP_PCT,VAR_MES_ANT_CANT,VAR_MES_A NT_CANT_PCT,VAR_FIN_ANY_IMP,VAR_FIN_ANY_IMP_PCT,VA R_FIN_ANY_CANT,VAR_FIN_ANY_CANT_PCT,VAR_INTERANUAL _IMP,VAR_INTERANUAL_IMP_PCT,VAR_INTERANUAL_CANT,VA R_INTERANUAL_CANT_PCT,VAR_PRESUPUESTO_IMP,VAR_PRES UPUESTO_IMP_PCT,VAR_PRESUPUESTO_CANT,VAR_PRESUPUES TO_CANT_PCT;

IF NOT done THEN
/* Inserción de los registros de referencia agrupados por CLIENTE y REPRE */
INSERT INTO VENTAS_CLIENTE_REPRE_BACKUP VALUES (ANYTRA,MESTRA,NULL,NCUENTA,NOMCLIENTE,CODREPRE,NO MREPRE,MES_ACTUAL_IMP,MES_ACTUAL_CANT,IMPBRU,DTOFA M,DTOART,DTOCAB,DTOOTR,PRECIO,PRECOS,VAR_MES_ANT_I MP,vAR_MES_ANT_IMP_PCT,VAR_MES_ANT_CANT,VAR_MES_AN T_CANT_PCT,VAR_FIN_ANY_IMP,VAR_FIN_ANY_IMP_PCT,VAR _FIN_ANY_CANT,VAR_FIN_ANY_CANT_PCT,VAR_INTERANUAL_ IMP,VAR_INTERANUAL_IMP_PCT,VAR_INTERANUAL_CANT,VAR _INTERANUAL_CANT_PCT,VAR_PRESUPUESTO_IMP,VAR_PRESU PUESTO_IMP_PCT,VAR_PRESUPUESTO_CANT,VAR_PRESUPUEST O_CANT_PCT);
UPDATE VENTAS_CLIENTE_REPRE_BACKUP SET NOMMES=InformarNombreMes(MESTRA);
END IF;
UNTIL done END REPEAT;

CLOSE CUR_VENTAS_CLIENTE_REPRE;

RETURN ANYTRA;

END $$

DELIMITER ;


Y la llamada.

select cur();

El resultado me lo devuelve como si fuera una columna de una tabla.


El problema que veo con esta solución a parte de no poder hacer DISTINCT es el siguiente, utilizando el SELECT *, si la tabla sobre la que lo hago me cambia (+ o -columnas), entonces tendría que cambiar todas las Funciones donde estubiera esta tabla, para añadirle las variables de destino en le INTO.

De ahi viene mi pregunta de saber porque razón con el SELECT * funciona pero con el SELECT ANYTRA no funciona.