2009-08-04 31 views
5

Tengo una situación extraña. Tengo que usar NVL (columna, columnb) en Oracle y MySQL. No puedo cambiar el SQL porque está en un paquete que no puedo editar, pero es lo único que no funciona en la aplicación que tengo entre MySQL y Oracle.mysql función para proporcionar equivalente a Oracle NVL

Cómo escribir NVL() en MySQL. Miré aquí (http://dev.mysql.com/doc/refman/5.0/en/create-function-udf.html) y parece que tengo que escribirlo en C y vincularlo a MySQL.

Sin embargo, http://dev.mysql.com/doc/refman/5.0/en/create-procedure.html parece decir que puedo hacerlo sin compilar un complemento.

He intentado esto pero no funciona. ¿Qué estoy haciendo mal?

CREATE FUNCTION NVL (first DATETIME, second DATETIME) 
RETURNS DATETIME 
begin 
DECLARE first DATETIME; 
DECLARE second DATETIME; 
DECLARE return_value DATETIME; 
SET return_value = IFNULL(first,second); 
RETURN return_value; 
end 

Respuesta

8

Uso COALESCE, es mucho más simple:

DELIMITER $$ 

CREATE FUNCTION NVL (first DATETIME, second DATETIME) 
RETURNS DATETIME 
BEGIN 
     RETURN COALESCE(first, second); 
END 

$$ 

DELIMITER ; 
+0

Esto es bang on! –

Cuestiones relacionadas