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

Multiples Select en un Procedimiento

Estas en el tema de Multiples Select en un Procedimiento en el foro de Mysql en Foros del Web. resulta que estoy jugando con procedimientos almacendos ya que quiero desde mysql restarle cierta cantidad de dinero a una cuenta el problema es cuando esta ...
  #1 (permalink)  
Antiguo 30/05/2011, 01:58
 
Fecha de Ingreso: mayo-2011
Mensajes: 44
Antigüedad: 12 años, 10 meses
Puntos: 2
Multiples Select en un Procedimiento

resulta que estoy jugando con procedimientos almacendos

ya que quiero desde mysql restarle cierta cantidad de dinero a una cuenta

el problema es cuando esta cuenta no tiene suficiente, entonces hice unas validaciones para que no aceptara hacer una deduccion donde no se podia, el problema es que ejecuto dos selects, uno para saber cuanto tengo en la cuenta y otro para devolver un valor "NO" si no se puede hacer la deduccion,
el problema es que en mi servlet solo puedo captar el primer select y no el segundo, entonces cualquier sugerencia seria de gran ayuda
adjunto el codigo del procedimiento almacenado
gracias por adelantado

Código:
delimiter //
    CREATE PROCEDURE retiro(IN cuenta varchar(12), IN canti INT)
    begin
        START TRANSACTION;
            SELECT @actu:=saldo
            FROM cuentas
            WHERE numCuenta=cuenta;
            
            if@actu>canti then
                set @actu=(@actu-canti);
                UPDATE `cuentas` SET `saldo`=@actu  WHERE `numCuenta`=cuenta;
            else
                SELECT @actu:='NO';
            end if;
            
        COMMIT;
    end;
//
  #2 (permalink)  
Antiguo 30/05/2011, 05: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, 4 meses
Puntos: 2658
Respuesta: Multiples Select en un Procedimiento

A primera vista el SP está correctamente escrito. Si no ves el resultado del primer y del último SELECT es porque ambos no producen salida, sino una asignación de un valor a una variable, por lo cual todo el proceso es interno dentro de la base.
Entiende esto: Ningún lenguaje de programación ni frameworks puede acceder a resultados internos de un SP porque los mismos están en el ámbito privado de MySQL, en un subproceso del servidor de MySQL.
¿Se entiende?
De un SP sólo puedes acceder a los valores de salida en variables INOUT y OUT del prototipo, o la tabla de salida, si la última sentencia ejecutada es un SELECT.

Para recuperar el valor, deberías poner al final un
Código MySQL:
Ver original
  1. SELECT @actu;
__________________
¿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 30/05/2011, 08:28
 
Fecha de Ingreso: mayo-2011
Mensajes: 44
Antigüedad: 12 años, 10 meses
Puntos: 2
Respuesta: Multiples Select en un Procedimiento

Es que el problema es que si me capta el primero, el segundo no, y los dos prododucen salida, ya hice los experimimentos debidos, el problema es que el resultado que me interesa es el segundo.... el del "NO"
Ahora bien si me pudieras dar una pequeña explicacion de eso de OUT, ya que he buscado por toda la red y no he encontrado algo significativo para aprender
  #4 (permalink)  
Antiguo 30/05/2011, 08:44
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: Multiples Select en un Procedimiento

Es posible que no lo puedas recuperar por algún problema de encabezado de la columna. Siempre es buena práctica poner un alias a columnas que se crean con funciones o con operaciones matemáticas.

Código MySQL:
Ver original
  1. DELIMITER $$
  2. CREATE PROCEDURE retiro(IN cuenta varchar(12), IN canti INT)
  3.         START TRANSACTION;
  4.         SET @actu = (SELECT saldo FROM cuentas WHERE numCuenta = cuenta);
  5.         IF @actu>canti THEN
  6.                SET @actu = @actu - canti;
  7.                UPDATE `cuentas` SET `saldo`= @actu  WHERE `numCuenta`= cuenta;
  8.         ELSE
  9.                SET @actu:='NO';
  10.         END IF;
  11.        COMMIT;
  12.        SELECT @actu Respuesta;
  13. END$$
  14. DELIMTER;

Respecto a las variables tipo OUT e INOUT, estas se declaran en el prototipo del SP, pero depende del lenguaje usado el poder recuperarlas. Yo personalmente sólo trabajo con VB.Net C#.Net y VB.ASP, por lo que me resulta sencilllo hacerlo. No tengo ni idea de cómo hacerlo con servlets. Eso lo tendrás que buscar en la documentación respectiva.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 30/05/2011 a las 08:57
  #5 (permalink)  
Antiguo 30/05/2011, 09:10
 
Fecha de Ingreso: mayo-2011
Mensajes: 44
Antigüedad: 12 años, 10 meses
Puntos: 2
Respuesta: Multiples Select en un Procedimiento

Gracias me sirvio de gran ayuda el codigo que pusiste, no se me habia ocurrido hacer el primer SELECT con SET, asi no muestra el resultado de este, gracias por tu ayuda
  #6 (permalink)  
Antiguo 30/05/2011, 09:53
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: Multiples Select en un Procedimiento

__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: resultados
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:44.