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

Procedimiento Almacenado

Estas en el tema de Procedimiento Almacenado en el foro de Mysql en Foros del Web. hola gente, como puedo saber si una consulta retorna NULL, es decir. SELECT * FROM usuarios WHERE rut = '162783444-7' la idea es si no ...
  #1 (permalink)  
Antiguo 08/05/2010, 11:29
Avatar de cadrogui  
Fecha de Ingreso: junio-2003
Mensajes: 875
Antigüedad: 20 años, 10 meses
Puntos: 5
Procedimiento Almacenado

hola gente, como puedo saber si una consulta retorna NULL, es decir.

SELECT * FROM usuarios WHERE rut = '162783444-7'

la idea es si no existe ese registro haga otra cosa mediante IF, ya que necesito, que si es NULL en usuarios realice la misma busqueda en 2 tablas mas.

gracias.
__________________
La mejor manera de aprender es por medio de un aprendizaje significativo....

http://www.cocert.cl
  #2 (permalink)  
Antiguo 08/05/2010, 16:09
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, 5 meses
Puntos: 2658
Respuesta: Procedimiento Almacenado

Código MySQL:
Ver original
  1. IF(SELECT * FROM usuarios WHERE rut = '162783444-7') IS NULL THEN
  2. ..
Pero sólo funciona en el contexto de un procedimiento almacenado.
__________________
¿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 09/05/2010, 14:12
Avatar de cadrogui  
Fecha de Ingreso: junio-2003
Mensajes: 875
Antigüedad: 20 años, 10 meses
Puntos: 5
Respuesta: Procedimiento Almacenado

lo hago de la siguiente forma pero no muestra nada.

el registro 162 no existe

Código PHP:
DROP PROCEDURE IF EXISTS `cosit`.`procedure1` $$
CREATE PROCEDURE `cosit`.`procedure1` ()
BEGIN

IF (SELECT FROM trabajadores WHERE id '162'IS NULL THEN

SELECT 
FROM prot_exclusion;

END IF;
END $$ 
Código PHP:

<?
$conectar 
mysql_connect("localhost","root","root");
$bd mysql_select_db("cosit");
$consulta mysql_query("CALL procedure1()");
$muestra mysql_fetch_array($consulta);

echo 
"mostrando el stored_procedure.php: " .$muestra['nombres'];
?>

cuando ejecuto el php no me muestra nada de nada, alguna sugerencia?

gracias.
__________________
La mejor manera de aprender es por medio de un aprendizaje significativo....

http://www.cocert.cl
  #4 (permalink)  
Antiguo 09/05/2010, 17:31
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, 5 meses
Puntos: 2658
Respuesta: Procedimiento Almacenado

Si el resultado de la sentencia es NULL, ejecuta el segundo SELECT... ¿Y qué hace en el caso de que no sea NULL?
Código MySQL:
Ver original
  1. DELIMITER $$
  2. DROP PROCEDURE IF EXISTS `cosit`.`procedure1` $$
  3. CREATE PROCEDURE `cosit`.`procedure1` ()
  4.    IF (SELECT * FROM trabajadores WHERE id = '162') IS NULL THEN
  5.       SELECT * FROM prot_exclusion;
  6.    ELSE
  7.       /*  En caso de ser NULL, ¿que hace? */
  8.    END IF;
  9. END $$  
  10.  
  11. DELIMITER ;
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 10/05/2010, 06:21
Avatar de cadrogui  
Fecha de Ingreso: junio-2003
Mensajes: 875
Antigüedad: 20 años, 10 meses
Puntos: 5
Respuesta: Procedimiento Almacenado

Código PHP:
DROP PROCEDURE IF EXISTS `cosit`.`procedure1` $$ 
CREATE PROCEDURE `cosit`.`procedure1` () 
BEGIN 

IF (SELECT FROM trabajadores WHERE id '162'IS NULL THEN 

SELECT 
FROM prot_exclusion
ELSE

SELECT FROM trabajadores WHERE id '1';

END IF; 
END $$ 

y sigue sin mostrar nada de nada..

gracias.
__________________
La mejor manera de aprender es por medio de un aprendizaje significativo....

http://www.cocert.cl
  #6 (permalink)  
Antiguo 10/05/2010, 06:27
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, 5 meses
Puntos: 2658
Respuesta: Procedimiento Almacenado

Si no obtienes resultados sólo puede suceder que:
1) No hay un trabajador con ID = 162 y tampoco hay registros en la tabla prot_exclusion.
2) No hay un trabajador con ID = 1.

Si hubiese datos que contienen estos valores, entonces tienes un error en la llamada a "CALL procedure1" en tu aplicación...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 10/05/2010, 06:47
Avatar de cadrogui  
Fecha de Ingreso: junio-2003
Mensajes: 875
Antigüedad: 20 años, 10 meses
Puntos: 5
Respuesta: Procedimiento Almacenado

el registro nro 162 no existe, y eso es para ejecutar la sentencia cuando sea null, en la tabla prot_exclusion hay registro 1 (Showing rows 0 - 0 (1 total, Query took 0.0219 sec))

Código PHP:
<?
$conectar 
mysql_connect("localhost","root","root");
$bd mysql_select_db("cosit");
$consulta mysql_query('CALL procedure1()');

$muestra mysql_fetch_array($consulta);

echo 
"mostrando el stored_procedure.php: " .$muestra['id'];
?>
ahi el code de la llamada!!

gracias
__________________
La mejor manera de aprender es por medio de un aprendizaje significativo....

http://www.cocert.cl
  #8 (permalink)  
Antiguo 10/05/2010, 07:17
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, 5 meses
Puntos: 2658
Respuesta: Procedimiento Almacenado

Código MySQL:
Ver original
  1. DELIMITER $$
  2. DROP PROCEDURE IF EXISTS `cosit`.`procedure1` $$
  3. CREATE PROCEDURE `cosit`.`procedure1` ()
  4.    IF (SELECT COUNT(*) FROM trabajadores WHERE id = 162) IS NULL THEN
  5.       SELECT * FROM prot_exclusion;
  6.    ELSE
  7.       SELECT * FROM trabajadores WHERE id = 1;
  8.    END IF;
  9. END $$  
  10.  
  11. DELIMITER ;
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #9 (permalink)  
Antiguo 10/05/2010, 07:36
Avatar de cadrogui  
Fecha de Ingreso: junio-2003
Mensajes: 875
Antigüedad: 20 años, 10 meses
Puntos: 5
Respuesta: Procedimiento Almacenado

uando agrego el procedimiento:

Código PHP:

DELIMITER 
$$
DROP PROCEDURE IF EXISTS `cosit`.`procedure1` $$
CREATE PROCEDURE `cosit`.`procedure1` ()
BEGIN
   
IF (SELECT COUNT(*) FROM trabajadores WHERE id 162IS NULL THEN
      SELECT 
FROM prot_exclusion;
   ELSE
      
SELECT FROM trabajadores WHERE id 1
   
END IF;
END $$  
DELIMITER 

me da error:

Cita:
Error
SQL query:

DELIMITER $$

MySQL said:

#1064 - 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 'DELIMITER' at line 1
pero si le quito DELIMITER $$ y el DELIMITER ; me dice:

Cita:
DROP PROCEDURE IF EXISTS `cosit`.`procedure1` $$# MySQL returned an empty result set (i.e. zero rows).
CREATE PROCEDURE `cosit`.`procedure1` (
) BEGIN IF( SELECT COUNT( * )
FROM trabajadores
WHERE id =162 ) IS NULL
THEN
SELECT *
FROM prot_exclusion;

ELSE SELECT *
FROM trabajadores
WHERE id =1;

END IF ;

END $$# MySQL returned an empty result set (i.e. zero rows).

Sigue sin mostrar algo ;(

gracias.
__________________
La mejor manera de aprender es por medio de un aprendizaje significativo....

http://www.cocert.cl
  #10 (permalink)  
Antiguo 10/05/2010, 07: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, 5 meses
Puntos: 2658
Respuesta: Procedimiento Almacenado

¿Con qué lo estás cargando?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #11 (permalink)  
Antiguo 10/05/2010, 07:54
Avatar de cadrogui  
Fecha de Ingreso: junio-2003
Mensajes: 875
Antigüedad: 20 años, 10 meses
Puntos: 5
Respuesta: Procedimiento Almacenado

si te refieres a como agrego el procedimiento, es con el SQL que trae el PhpMyadmin

saludos
__________________
La mejor manera de aprender es por medio de un aprendizaje significativo....

http://www.cocert.cl
  #12 (permalink)  
Antiguo 10/05/2010, 08:03
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, 5 meses
Puntos: 2658
Respuesta: Procedimiento Almacenado

Correcto. Eso quiere decir que el DELIMITER lo pone phpMyAdmin, y los delimitadores los tienes que indicar en el textbox que se encuentra abajo a la izquierda del TextArea donde se escribe el script.

El tema es que ya he probado la lógica del último script que te pasé, y anda perfectamente. Si no devuelve datos solamente debería ser porque los datos no existen, pero no por errores de SQL.

Revisa mejor el script de PHP y consulta en el foro de PHP, porque el problema excede a la base de datos.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #13 (permalink)  
Antiguo 10/05/2010, 08:20
Avatar de cadrogui  
Fecha de Ingreso: junio-2003
Mensajes: 875
Antigüedad: 20 años, 10 meses
Puntos: 5
Respuesta: Procedimiento Almacenado

ok, en el textbos le pongo $$, pero nada de nada: dejo un a cap:



Uploaded with ImageShack.us

saludos
__________________
La mejor manera de aprender es por medio de un aprendizaje significativo....

http://www.cocert.cl
  #14 (permalink)  
Antiguo 10/05/2010, 08:50
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, 5 meses
Puntos: 2658
Respuesta: Procedimiento Almacenado

Creo que no me entendiste: Lo que te decía es el método para cargar el SP en phpMyAdmin.
Pero se supone que es lo que estabas haciendo tú mismo para cargarlo.. ¿O no?

Una vez corrido, no se espera que devuelva nada en ese script. Simplemente que lo cargue en la base, ya que los SP existen en las bases, para luego invocarse con CALL.

Pero el problema subsiste: Tu estas seguro de que existen datos para recibir el valor y yo sostengo que si es así, el problema está en el PHP y no en la base.

¿Por qué no consultas el problema en el Foro de PHP? Es probable que ellos vean mejor la solución si el problema está donde yo supongo.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #15 (permalink)  
Antiguo 10/05/2010, 09:17
Avatar de cadrogui  
Fecha de Ingreso: junio-2003
Mensajes: 875
Antigüedad: 20 años, 10 meses
Puntos: 5
Respuesta: Procedimiento Almacenado

ok, pregunto en php, muchisimas gracias!!!

saludos
__________________
La mejor manera de aprender es por medio de un aprendizaje significativo....

http://www.cocert.cl
  #16 (permalink)  
Antiguo 10/05/2010, 10:35
Avatar de cadrogui  
Fecha de Ingreso: junio-2003
Mensajes: 875
Antigüedad: 20 años, 10 meses
Puntos: 5
Respuesta: Procedimiento Almacenado

tenias razon el error estaba en php, pero ahora que funciona no hace lo que yo quiero.

1.- SELECT * FROM trabajadores WHERE id = 162 no existe, osea es NULL
2.- SELECT * FROM prot_exclusion WHERE id = 1 jamas muestra ese record
3.- SELECT * FROM trabajadores WHERE id = 3 lo muestra siempre y cuando la sentencia:

SELECT COUNT (*) FROM trabajadores WHERE id = 162 este formada de esta forma.

en cambio si lo construyo de la siguiente forma:

Código PHP:
CREATE PROCEDURE `cosit`.`procedure1` ()
BEGIN
  
IF (SELECT COUNT(*) FROM trabajadores WHERE id 1620THEN
     SELECT 
FROM trabajadores WHERE id 3;
  ELSE
SELECT FROM prot_exclusion WHERE id 1
     

  
END IF; 
me muestra el dato que quiero, pero el IS NULL no funciona, y lo necesito!!!

saludos
__________________
La mejor manera de aprender es por medio de un aprendizaje significativo....

http://www.cocert.cl

Etiquetas: procedimiento, almacenar
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 04:19.