Ver Mensaje Individual
  #2 (permalink)  
Antiguo 05/11/2011, 14:51
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, 5 meses
Puntos: 2658
Respuesta: mi primer stored procedure

Por empezar, un stored procedure es una rutina programada en PL/SQL según la versión implementada en el DBMS que uses (en este caso MySQL) y que reside en el servidor. No es dependiente de ningún lenguaje de programación, y no puede contener variables o sentencias de otro lenguaje.
Un SP se carga una sola vez y no se envía nunca más, a menos que se desee modificar su cuerpo, cosa que algunas veces necesitas hacer.

Como sólo admite código SQL, no puedes incluir ese '$ID', porque eso es una cadena de texto constante en el SP. los parámetros que puedan necesitarse se deben incluir cuando se lo llama, y sólo a través de las variables declaradas en el prototipo.
Código MySQL:
Ver original
  1. DELIMITER $$
  2.  
  3. CREATE PROCEDURE condicion (IN ID INT)
  4.    BEGIN
  5.             DECLARE numero INT;
  6.             SET numero = (SELECT valor FROM principal WHERE ID = ID);
  7.             IF numero >10 THEN
  8.                 SELECT valor2 FROM estadisticas WHERE ID = ID
  9.             ELSE
  10.                 SELECT 'El valor minimo para acceder es de 11.' valor2;
  11.             END IF;
  12.    END$$
  13. DELIMITER ;
Para pedir el ID 1, sería:
Código MySQL:
Ver original
  1. CALL condicion(1);
Detalle: No uses "||" como delimitadores, puede traerte problemas en algunos casos porque esa es la forma del OR binario en SQL. Usa mejor lo que el manual dice: "$$"

Nota: DELIMITER sólo se usa si vas a cargar el Sp en la consola de MySQL, pero no si usas alguna aplicación, como phpMyadmin, Navicat o cosas asi. SI vas a crear programáticamente el SP, simplemente envíalo así:

Código MySQL:
Ver original
  1. CREATE PROCEDURE condicion (IN ID INT)
  2.    BEGIN
  3.             DECLARE numero INT;
  4.             SET numero = (SELECT valor FROM principal WHERE ID = ID);
  5.             IF numero >10 THEN
  6.                 SELECT valor2 FROM estadisticas WHERE ID = ID
  7.             ELSE
  8.                 SELECT 'El valor minimo para acceder es de 11.' valor2;
  9.             END IF;
  10.    END;

Tip final: El PL/SQL usado por cada DBMS no es compatible con el de otro DBMS porque no existe un estadar. Por eso no puedes usar el mismo código en SQL Server, Oracle, MySQL, DB2 o Postgre. Cada uno tiene su propia de escribir los SP.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)