Ver Mensaje Individual
  #4 (permalink)  
Antiguo 11/11/2014, 09:05
Avatar de gnzsoloyo
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: Procedimiento almacenado transacción de banco

Tienes varios erroes:
1) WAMP Server no es con lo que ejecutas esto, sino por medio de la pestaña "SQL" de phpMyadmin.
2) Para ejecutar la creación de SP en phpMyadmin, debe indicarse el delimitador de sentencias transitorio, en un textoBox, algo mas abajo del panel de edicion de las sentencias.
3) El delimitador debe cambiarse por otro paracter o conjuto de caracteres que no puedan ser confundidos. El manual sugiere usar "$$".
4) Todas las sentencias en MySQL terminan en ";". Todas.
5) Un "SET variable = SELECT... " generará un error sintáctico, es conveniente poner el SELECT entre paréntesis, o bien usar
Código SQL:
Ver original
  1. SELECT... FROM ... WHERRE ... INTO variable
6) Todo bloque IF... THEN ... END IF se cierra también con ";", pero solo despues del END IF.
7) Un INSERT múltiple se compone con conjuntos de VALUES entre parentesis, separados por comas. Eso es de manual basico porque se usa en todos los DBMS.

Sería mas o menos así:
Código MySQL:
Ver original
  1.   P_NUMERO_CUENTA INT,
  2.   P_MONTO_RETIRO DECIMAL(14,2) -- Leer el manual de referencia por favor, estas cosas se aprenden alli.
  3. )
  4.   DECLARE OBTENER_SALDO INT;
  5.   DECLARE NUEVO_SALDO INT;
  6.   SET OBTENER_SALDO = (SELECT SALDO FROM CUENTA WHERE NUMERO_CUENTA = P_NUMERO_CUENTA);
  7.   IF OBTENER_SALDO >= P_MONTO_RETIRO THEN
  8.         SET NUEVO_SALDO = OBTENER_SALDO - P_MONTO_RETIRO
  9.         UPDATE CUENTA SET SALDO = NUEVO_SALDO
  10.         WHERE NUMERO_CUENTA = P_NUMERO_CUENTA;
  11.         INSERT INTO MOVIMIENTOS
  12.         VALUES (NUMERO_CUENTA, SALDO, SALDO_ACTUAL, SALDO_RETIRO), (P_NUMERO_CUENTA,OBTENER_SALDO,NUEVO_SALDO,P_MONTO_RETIRO);
  13. END$$
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)