2010-08-24 12 views
8

Tengo un script SQL para ejecutar en una base de datos grande. Me gustaría poner un par de consultas simples al comienzo, solo como un chequeo de cordura.Afirmación en MySQL

¿Hay alguna forma de escribir una afirmación en MySQL? O cualquier tipo de "seleccionar ..., y si no coincide con este valor, entonces abortar todo el script"?

+0

Más detalles: ¿qué es exactamente lo que busca utilizar para la lógica de decisión: una tabla, columna, valor específico? –

+1

Soy bastante flexible en este punto, ya que solo quiero asegurarme de que sea la base de datos correcta, y los datos no son terriblemente incorrectos. Ver un recuento (*) o min (campo) (en un rango particular), o asegurarse de que el campo <> 'const', o algo así, sería genial. – Ken

Respuesta

3

Se puede poner todo el guión en una sentencia if, dependiendo de qué tipo de valor es necesario comprobar, he aquí un ejemplo:

DECLARE @value int 
SET @value = (SELECT COUNT(*) FROM dbo) 

IF @value >0 
BEGIN 
--Do Stuff Here 
END 
+2

MySQL no permite el flujo de control fuera de los programas almacenados, frustrante. – Deebster

+0

@Brett, esto no funciona para MySQL. Vea las respuestas a continuación. – Pacerier

1

También puede hacerlo a través de un procedimiento/función almacenada, como en el siguiente ejemplo:

CREATE FUNCTION `RunProcess`() RETURNS INT(11) 
runProcess:BEGIN 

DECLARE check_value INT; 
DECLARE error_code INT; 

SELECT COUNT(*) FROM dbo INTO check_value; 

IF check_value = 0 THEN set error_code = 666; 
    LEAVE runProcess; 
    RETURN error_code; 
END IF; 

... 
... 
END; 
+0

Esto podría crear un problema si también está intentando ejecutar otros sprocs ........... – Pacerier

5

Un código loco. El punto principal es: SET podría generar errores para las variables de mysql.

Por ejemplo.

SET @value = 0; 
SET SESSION sql_mode = if(@value, @@SESSION.sql_mode, 'something wrong uphere'); 

salida sería ERROR 1231 (42000): Variable 'sql_mode' can't be set to the value of 'something wrong uphere' y ejecución se detendrían.

Este enfoque no es semántico, pero funciona.

+0

Ingenious ~! ¿Cuáles son algunos otros trucos? – Pacerier

Cuestiones relacionadas