12

Cuando creo el procedimiento guardado, puedo crear alguna variable ¿sí? por ejemplo:Establezca el resultado de la variable, a partir de la consulta

CREATE PROCEDURE `some_proc`() 
BEGIN 

    DECLARE some_var INT; 
    SET some_var = 3; 
.... 

PREGUNTA: pero cómo configurar variable resultado de la consulta, que es la forma de hacer algo como esto:

DECLARE some_var INT; 
SET some_var = SELECT COUNT(*) FROM mytable ; 

?

+0

Vea aquí, su pregunta es posible por duplicado. http://stackoverflow.com/questions/3888735/mysql-set-user-variable-from-result-of-query?rq=1 – bodi0

+1

No, no es realmente un duplicado. El tema de http://stackoverflow.com/questions/3888735/mysql-set-user-variable-from-result-of-query?rq=1 es "variables definidas por el usuario". Esta pregunta es sobre variables locales de procedimientos almacenados. La sintaxis en mi respuesta también funciona para las variables definidas por el usuario, pero no al revés. –

Respuesta

33

Existen varias formas de hacerlo.

Se puede utilizar una subconsulta:

SET some_var = (SELECT COUNT(*) FROM mytable); 

(al igual que el original, simplemente agregar un paréntesis en torno a la consulta)

o utilizar la sintaxis SELECT INTO para asignar múltiples valores:

SELECT COUNT(*), MAX(col) 
INTO some_var, some_other_var 
FROM tab; 

La sintaxis de subconsulta es un poco más rápida (no sé por qué) pero solo funciona para asignar un único valor. La selección en sintaxis le permite establecer múltiples valores a la vez, por lo que si necesita tomar múltiples valores de la consulta, debe hacerlo en lugar de ejecutar la consulta una y otra vez para cada variable.

Por último, si su consulta no devuelve una sola fila, sino un conjunto de resultados, se puede utilizar un cursor.

+0

Estás equivocado. –

+0

Roland Bouman, muchas gracias, su segunda variante está funcionando, pero primero no, paréntesis no ayuda. :) –

+0

No. Ambos funcionan. Debe haber cometido un error de sintaxis. mysql> delimitador // mysql> create función f() -> int -> comienzan -> declaran v int; -> establecer v = (seleccionar conteo (*) desde dual); -> return v; -> fin; -> // Query OK, 0 filas afectadas (0,05 seg) mysql> seleccione f(); -> // + ------ + | f() | + ------ + | 1 | + ------ + 1 fila en el conjunto (0,00 seg) mysql> selecciona versión(); -> // + ----------- + | versión() | + ----------- + | 5.5.20 | + ----------- + 1 fila en el conjunto (0.00 sec) –

3

la siguiente instrucción SELECT debe permitirle guardar el resultado de la cuenta (*).

SELECT COUNT(*) FROM mytable INTO some_var; 
+2

MySQL le permite establecer la cláusula INTO como última cláusula al final de la instrucción. Sin embargo, en SQL estándar aparece entre las cláusulas SELECT y FROM. –

+0

juergen d, muchas gracias. :) –

Cuestiones relacionadas