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

sentencias de sqlserver en mysql

Estas en el tema de sentencias de sqlserver en mysql en el foro de Mysql en Foros del Web. Hola, en mysql como se puede asignar el valor de una consulta a una variable y asignarle un valor a una viariable output como se ...
  #1 (permalink)  
Antiguo 20/10/2015, 12:42
 
Fecha de Ingreso: febrero-2006
Mensajes: 446
Antigüedad: 18 años, 2 meses
Puntos: 3
sentencias de sqlserver en mysql

Hola, en mysql como se puede asignar el valor de una consulta a una variable y asignarle un valor a una viariable output como se puede hacer en sqlserver

por ejemplo esto que puedo hacer en sqlserver me gustaria conseguirlo en mysql, pero no encuentro la forma.

Gracias

Código PHP:

@respuesta int ouput

declare @correo nvarchar
select 
@correocorreo from mailUsuarios where idUser=1

set 
@respuesta =
  #2 (permalink)  
Antiguo 21/10/2015, 07:56
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 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.
  #3 (permalink)  
Antiguo 22/10/2015, 08:40
 
Fecha de Ingreso: febrero-2006
Mensajes: 446
Antigüedad: 18 años, 2 meses
Puntos: 3
Respuesta: sentencias de sqlserver en mysql

Gracias, ahora necesito tomar el parametro
set parRespuesta:= 1; desde php, pero no lo consigo. Si pruebo desde phpmyadmin visualizo el parametro 1 cuando ejecuto el procedimiento, pero a mi llamado desde php queda en blanco y eso aun no encuentro como solucionarlo. Por casualidad tu sabes si esa linea de codigo esta correcta para desplegar el valor del parametro output

echo json_encode($objdb->consulta("SELECT @parRespuesta as respuesta"));
  #4 (permalink)  
Antiguo 22/10/2015, 08:42
 
Fecha de Ingreso: febrero-2006
Mensajes: 446
Antigüedad: 18 años, 2 meses
Puntos: 3
Respuesta: sentencias de sqlserver en mysql

[PHP"]
public function consulta($query) {
// $valores = array();

$result = mysqli_query($this->conn, $query);
if (!$result) {
die('Error query BD:' . mysqli_error());
} else {
$num_rows = mysqli_num_rows($result);

for ($i = 0; $i < $num_rows; $i++) {
$row = mysqli_fetch_assoc($result);
$valores[] = array_map('utf8_encode', $row);
}
}

if ($num_rows > 0) {
return $valores;
} else {
return 0;
}
}
[/PHP]

Etiquetas: select, sentencias, sql, usuarios
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 05:02.