функция mysql для предоставления эквивалента Oracle NVL - PullRequest
7 голосов
/ 04 августа 2009

У меня странная ситуация. Я должен использовать NVL (columna, columnb) в Oracle и MySQL. Я не могу изменить SQL, как он есть в пакете, который я не могу редактировать, но это единственное, что не работает в моем приложении между MySQL и Oracle.

Как бы я написал NVL () в MySQL. Я посмотрел здесь (http://dev.mysql.com/doc/refman/5.0/en/create-function-udf.html) и похоже, что я должен написать его на C и связать его с MySQL.

Однако http://dev.mysql.com/doc/refman/5.0/en/create-procedure.html, кажется, говорит, что я могу сделать это без компиляции дополнения.

Я пробовал это, но это не работает. Что я делаю не так ?

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

Ответы [ 2 ]

10 голосов
/ 04 августа 2009

Используйте COALESCE, это намного проще:

DELIMITER $$

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

$$

DELIMITER ;
4 голосов
/ 04 августа 2009

Я думаю, вам нужен метод COALESCE ().

http://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html#function_coalesce

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...