Hola a todas

En mi SP, hay una consulta SELECT como esta.

SELECT val_01, val_02 INTO var_01, var_02 FROM table_name WHERE col_name = condition_01;

Esta consulta funciona correctamente.

Pero he agregado el controlador de salida para SQLWARNING y cuando la consulta SELECT anterior no tiene resultado, hace que ADVERTENCIA SQL sea así y se detenga.

Sin datos: cero filas recuperadas, seleccionadas o procesadas

Busqué en Google y encontré una manera de resolver este problema. Está cambiando la consulta de esta manera ...

SELECT var_01 = val_01, var_02 = val_02 FROM table_name WHERE col_name = condition_01;

Esta consulta funciona. Pero hay una diferencia entre la consulta original y la consulta modificada.

En SP, el original no arroja el resultado de la consulta SELECT. Simplemente pone el valor de consulta SELECT en variables.

Pero el último arroja su resultado SELECCIONAR con el valor de la variable.

Entonces, mi código cpp que llama a SP tiene un valor incorrecto.

Puedo cambiar la consulta a ...

SET var_01 = SELECT val_01 FROM table_name WHERE col_name = condition_01;

SET var_02 = SELECT val_02 FROM table_name WHERE col_name = condition_01;

Pero como sabes, esto es muy ineficiente y la consulta a continuación no funciona.

SET var_01, var_02 = (SELECT val_01, val_02 FROM table_name WHERE col_name = condition_01);

¿Hay una manera eficiente de hacer el mismo resultado de la consulta original?

Por favor, ayúdame. Gracias.

1
passion053 28 dic. 2016 a las 12:47

3 respuestas

La mejor respuesta

Sin más contexto, no está claro exactamente qué está preguntando, pero si necesita anular temporalmente el controlador de salida, anide su consulta en un nuevo bloque de alcance, con un controlador para borrar las variables. (Deben borrarse si están dentro de un bucle, o aún contendrán sus valores anteriores si se asignan).

-- inside existing procedure
BEGIN -- add this and the handler
  DECLARE CONTINUE HANDLER FOR NOT FOUND SET var_01 = NULL, var_02 = NULL;
  SELECT val_01, val_02 INTO var_01, var_02 FROM table_name WHERE col_name = condition_01;
END; -- add this
-- procedure continues here
2
Michael - sqlbot 29 dic. 2016 a las 04:46

SELECCIONE a, b EN aa, bb ...

Referencia: consulte INTO en https: //dev.mysql .com / doc / refman / 5.7 / es / select.html

0
Rick James 28 dic. 2016 a las 21:27
SET @var_01 = @var_02 = '';
SELECT _val_01, _val_02 INTO @var_01, @var_02 FROM table_name WHERE col_name = condition_01;

// check whether var_01=='' or length==0 then do what you want
SELECT @var_01, @var_02
// or 
SELECT LENGTH(@var_01)
0
Mil0R3 28 dic. 2016 a las 10:06