2009-08-04 10 views
5

J'ai une situation étrange. Je dois utiliser NVL (columna, columnb) dans Oracle et MySQL. Je ne peux pas changer le SQL tel qu'il est dans un paquet que je ne peux pas éditer mais c'est la seule chose qui ne fonctionne pas dans l'application que j'ai entre MySQL et Oracle.Fonction mysql pour fournir l'équivalent à Oracle NVL

Comment écrire NVL() dans MySQL. J'ai regardé ici (http://dev.mysql.com/doc/refman/5.0/en/create-function-udf.html) et il semble que je doive l'écrire en C et le lier à MySQL. Cependant, http://dev.mysql.com/doc/refman/5.0/en/create-procedure.html semble dire que je peux le faire sans compiler un addon. J'ai essayé mais cela ne fonctionne pas. Qu'est-ce que je fais 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 

Répondre

8

Utilisez COALESCE, il est beaucoup plus simple:

DELIMITER $$ 

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

$$ 

DELIMITER ; 
+0

Ceci est juste! –

Questions connexes