Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Consulta PROCEDURE

Estas en el tema de Consulta PROCEDURE en el foro de Mysql en Foros del Web. Saludos estoy recien retomando los PROCEDUREs en MySQL, e leido mucho sobre estos pero me gustaria que me digan que esta mal en este. lo ...
  #1 (permalink)  
Antiguo 19/10/2010, 15:36
Avatar de shinta_snake  
Fecha de Ingreso: diciembre-2009
Mensajes: 70
Antigüedad: 14 años, 4 meses
Puntos: 0
Consulta PROCEDURE

Saludos estoy recien retomando los PROCEDUREs en MySQL, e leido mucho sobre
estos pero me gustaria que me digan que esta mal en este. lo explicare.

intento obtener el ID de la TABLA a traves de una consulta.
ingreso 2 valores, los cuales me dan el ID no ay 2 registros iguales.
declaro las variables a ocupar, y en B INTENTO ASIGNAR LA ID del RESULTADO,
y despues consulto si funciono la consulta.

Código:
delimiter //
CREATE PROCEDURE ConsId (
                        In sen varchar(20), 
                        In prog varchar(20),
                        OUT msn varchar(30))
BEGIN
DECLARE a,b INTEGER DEFAULT 0 ;
SET b = (select idtabla from tabla where señal=sen AND programa=prog);
IF (b > 0 ) AND (b <> NULL) THEN
  SET msn=('FUNCIONO');
ELSE
  SET msn=('NO FUNCO');
END IF;
SET a=(SELECT @@error_count);
IF a = 0 THEN
COMMIT;
ELSE
ROLLBACK;
END IF;
END;
//
espero sus respuestas.
  #2 (permalink)  
Antiguo 19/10/2010, 15:49
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Consulta PROCEDURE

Desglosando:
1) No uses caracteres extendidos como la "ñ". Pueden tener resultados inesperados si el parser no los interpreta bien.
2) NULL no es un dato, es un estado en todo caso o un puntero a la nada, que es como se lo define, como no es un dato no pueden usarse operadores lógicos contra él. Para saber si algo es o no NULL se usa IFNULL() o bien IS NULL.
3) Para usar COMMIT o ROLLBACK, primero debes haber iniciado la transacción, cosa que no haces en ninguna parte del código.
4) Cuando cambias los delimitadores, el bloque BEGIN/END termina con los nuevos delimitadores, no con los viejos.

Fuera de eso, no deberías tener problemas para compilarlo.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 19/10/2010, 16:13
Avatar de shinta_snake  
Fecha de Ingreso: diciembre-2009
Mensajes: 70
Antigüedad: 14 años, 4 meses
Puntos: 0
Respuesta: Consulta PROCEDURE

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Desglosando:
1) No uses caracteres extendidos como la "ñ". Pueden tener resultados inesperados si el parser no los interpreta bien.
2) NULL no es un dato, es un estado en todo caso o un puntero a la nada, que es como se lo define, como no es un dato no pueden usarse operadores lógicos contra él. Para saber si algo es o no NULL se usa IFNULL() o bien IS NULL.
3) Para usar COMMIT o ROLLBACK, primero debes haber iniciado la transacción, cosa que no haces en ninguna parte del código.
4) Cuando cambias los delimitadores, el bloque BEGIN/END termina con los nuevos delimitadores, no con los viejos.

Fuera de eso, no deberías tener problemas para compilarlo.
1) ejecuto el Select, y no tengo problema con las Ñ a menos que dentro del PROCEDURE tenga problema pero lo modificare.
2) no lo conocia lo intentare ocupar.
3)si los saco funcionaria iwal?

lo ejecuto y me da resultado NULL, por eso hacia la consutla en el IF para saber
si esta registrando o asignando un NULL, pero en teoria funcionaria asi.
la linea de codigo SET remarcada no se si esta bn osea io kreo q esta bn
pero parece que no asigna un resultado en teoria me deberia dar el "1"
y al consultar el IF deberia ser MAYOR.

Código:
//
CREATE PROCEDURE Proc_ConsId (In sen varchar(20), In prog varchar(20),OUT msn varchar(30))
BEGIN
DECLARE b INTEGER DEFAULT 0 ;
SET b=(select idbloqueos from bloqueos where señal=sen AND programa=prog);
IF (b > 0 ) THEN
  SET msn=('FUNCIONO');
ELSE
  SET msn=('NO FUNCO');
END IF;
END;
//

CALL Proc_ConsId('A','B',@msn);
select @msn;

Etiquetas: procedure
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:46.