Ver Mensaje Individual
  #2 (permalink)  
Antiguo 21/10/2015, 07:56
leonardo_josue
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 4 meses
Puntos: 447
Respuesta: sentencias de sqlserver en mysql

Hola -thor-:

El uso de parámetros de salida en procedimientos en realidad no es muy distinto a como se hace en SQL Server, aunque tiene pequeñas diferencias:

1. los parámetros de salida se definen en la declaración del procedimiento almacenado, es decir, pones algo como esto:

Código MySQL:
Ver original
  1. PROCEDURE verifica_correo(p_id INT, OUT p_correo VARCHAR(50))

En este procedimiento se define un parámetro de entrada (p_id) y un parámetro de salida (p_correo).

2.Los parámetros de salida NO SE DECLARAN COMO VARIABLES, es decir NO LLEVAN @ ANTES DEL NOMBRE. El @ sirve para declarar variables locales.

3. La asignación de valores a los parámetros de salida o variables se hace con la cláusula INTO si se el valor proviene de una consulta SELECT.

4. Es importante que los parámetros NO SE LLAMEN IGUAL QUE ALGÚN CAMPO DE TABLA O NOMBRE DE TABLA, puedes poner un prefijo como p_ para diferenciar los parámetros del resto de los objetos de BD's.

Checa este ejemplo, supongamos que tienes una tabla así:

Código MySQL:
Ver original
  1. mysql> SELECT * FROM tabla;
  2. +------+---------------+
  3. | id   | correo        |
  4. +------+---------------+
  5. |    1 | [email][email protected][/email] |
  6. |    2 | [email][email protected][/email] |
  7. |    3 | [email][email protected][/email] |
  8. +------+---------------+
  9. 3 rows in set (0.00 sec)

Código MySQL:
Ver original
  1. DELIMITER $$
  2.  
  3.     PROCEDURE verifica_correo(p_id INT, OUT p_correo VARCHAR(50))    
  4.     BEGIN
  5.        SELECT correo INTO p_correo FROM tabla WHERE id = p_id;
  6.     END$$
  7.  
  8. DELIMITER ;

Lo que hace el procedimiento es buscar el correo para el p_id correspondiente y regresarlo como un parámetro de salida. l para invocar el SP, harías algo así:

Código MySQL:
Ver original
  1. mysql> SET @correo='';
  2. Query OK, 0 rows affected (0.00 sec)
  3.  
  4. mysql> CALL verifica_correo(1, @correo);
  5. Query OK, 1 row affected (0.00 sec)
  6.  
  7. mysql> SELECT @correo;
  8. +---------------+
  9. | @correo       |
  10. +---------------+
  11. +---------------+
  12. 1 row in set (0.00 sec)

es decir, primero declaras una variable local (ahora sí utilizando el @) que es donde vas a almacenar el valor de salida del SP, después de ejecutar el CALL al procedimiento, la variable @correo contiene lo que se asignó en el procedimiento almacenado.

Si no se encuentra el id en la tabla que se está consultando, entonces se regresa un NULL:

Código MySQL:
Ver original
  1. mysql> CALL verifica_correo(4, @correo);
  2. Query OK, 0 rows affected, 1 warning (0.00 sec)
  3.  
  4. mysql> SELECT @correo;
  5. +---------+
  6. | @correo |
  7. +---------+
  8. | NULL    |
  9. +---------+
  10. 1 row in set (0.00 sec)

haz la prueba y nos comentas.

Saludos
Leo.