2009-08-04 30 views
5

Tôi có một tình huống lạ. Tôi phải sử dụng NVL (columna, columnb) trong Oracle và MySQL. Tôi không thể thay đổi SQL vì nó nằm trong một gói mà tôi không thể chỉnh sửa nhưng nó là thứ duy nhất không hoạt động trong ứng dụng tôi có giữa MySQL và Oracle.mysql chức năng để cung cấp tương đương với Oracle NVL

Làm cách nào để viết NVL() trong MySQL. Tôi đã xem ở đây (http://dev.mysql.com/doc/refman/5.0/en/create-function-udf.html) và có vẻ như tôi phải viết nó trong C và liên kết nó với MySQL.

Tuy nhiên http://dev.mysql.com/doc/refman/5.0/en/create-procedure.html dường như nói rằng tôi có thể làm điều đó mà không cần biên dịch thêm.

Tôi đã thử cách này nhưng không hoạt động. Tôi đang làm gì sai?

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 

Trả lời

8

Sử dụng COALESCE, nó đơn giản hơn nhiều:

DELIMITER $$ 

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

$$ 

DELIMITER ; 
+0

Đây là sự thật! –

Các vấn đề liên quan