Declaraciones IF de MySQL en problemas de consulta
Frecuentes
Visto 3,630 equipos
2
Tengo la siguiente consulta que estoy tratando de ejecutar. Es el punto de partida de una consulta necesaria para ejecutar un informe:
SET @fname = 'Bob';
SET @blah = 0;
SELECT CASE WHEN @fname IS NULL THEN @blah = 1 ELSE @blah END;
IF (@blah > 0) THEN
SELECT * FROM mytable
END IF;
Aparentemente, algo está mal con mi sintaxis, pero no puedo resolverlo. He escrito otras consultas usando declaraciones IF sin problema. Esto no se ejecutará ni en SQLyog ni en Workbench. Dice que hay un error de sytax en "IF" con o sin los paréntesis, no importa.
Todo lo que necesito es la capacidad de evaluar una variable/parámetro de entrada en la instrucción IF.
Cualquier ayuda se agradece. NOTA - SELECT CASE puede no ser necesario si puedo hacer que IF evalúe los parámetros correctamente, pero estaba probando posibles soluciones.
Muchas Gracias
7 Respuestas
2
Puede usar la construcción IF-THEN solo dentro de la cláusula BEGIN...END, que solo se puede usar en procedimientos, funciones, disparadores y eventos. Es imposible usarlo en un script simple.
Para su caso, sugeriría este:
SELECT * FROM mytable WHERE @blah > 0;
Respondido 14 ago 12, 11:08
2
- Debe haber un procedimiento o algún tipo de script que deba ejecutarse según el caso.
CALL
el método de procedimiento debe iniciarse en la fuente de datos del informe en tales escenariosEl script se puede escribir de la siguiente manera: (Nota: el PROCEDIMIENTO puede tener parámetros según sea necesario)
DELIMITER ? CREATE PROCEDURE XYZ() BEGIN SET @fname = 'Bob'; SET @blah = 1; SELECT CASE WHEN @fname IS NULL THEN @blah = 0 ELSE @blah END; IF (@blah > 0) THEN SELECT * from mytable; END IF; END ? DELIMITER;
A continuación, puede pasar el
CALL XYZ()
con o sin parámetros según lo requiera su fuente de datos o donde pasaría su consulta para que se ejecute para generar un informe.
Lo siguiente funciona correctamente en MySQL Workbench. SELECT CASE
la consulta se puede eliminar del procedimiento anterior si no es necesario.
Respondido el 05 de Septiembre de 12 a las 11:09
0
Veo un problema con la declaración else:
SELECT CASE WHEN @fname IS NULL THEN @blah = 1 END;
contestado el 03 de mayo de 12 a las 21:05
No tengo que ponerle bla a nada, puede ser solo él mismo. Funciona bien con MSSQL, por lo que no esperaría que eso sea un problema aquí, ya que configuré bla en la parte superior. - Cifrado
0
// Using procedure getting result as per requirement
drop procedure abc;
DELIMITER //
create procedure abc()
begin
declare fname varchar(10);
declare blah int;
set fname = 'Bob';
set blah = 0;
if(fname IS not NULL) then
SELECT * from studmaster;
end if;
end //
DELIMITER ;
//--comment--> for execute procedure
call abc();
Respondido 18 ago 12, 13:08
0
No estoy seguro si esto te ayuda mucho, pero puedes usar la declaración if en una consulta sql
Select Blah.name,sum(Blah.quan) as SumofQuan, IF(Blah.descr LIKE '%searchterm%', "FOUND", IF(Blah.descr ="x", "x", "The Rest")) as New_DECRIPTION
Respondido el 04 de enero de 13 a las 20:01
-1
Entiendo más de SQL SERVER, entonces puede ser que mi respuesta no sea muy útil, pero de todos modos, aquí está mi ayuda:
Intente cambiar el fragmento de código a continuación,
SELECT @blah = (CASE WHEN @fname IS NULL THEN 1 ELSE @blah END)
Respondido 17 ago 12, 13:08
-1
En mi opinión, cuando uso el servidor Sql, descubrí que la variable no puede asignar un valor sin declararlo.
Creo que debe haber hecho como:
declare @fname nvarchar(50)
declare @blah int
entonces debes asignarle valor a la variable..
SET @fname = 'Bob'
SET @blah = 0
SELECT CASE WHEN @fname IS NULL THEN @blah = 1 ELSE @blah END;
IF (@blah > 0) THEN
SELECT * FROM mytable
END IF;
Respondido 17 ago 12, 16:08
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas mysql sql or haz tu propia pregunta.
qué es exactamente lo que quieres lograr, comencemos desde allí primero: omoabobade