2012-01-12 34 views
5

Khi tôi cố gắng tạo ra các chức năng lưu trữ với tên tương tự nhưng chữ ký khác nhau:quá tải MySQL lưu trữ chức năng

CREATE FUNCTION `max`(a INT, b INT) RETURNS INT 
BEGIN 
    IF a > b THEN RETURN a; ELSE RETURN b; END IF; 
END 

CREATE FUNCTION `max`(a DATE, b DATE) RETURNS DATE 
BEGIN 
    IF a > b THEN RETURN a; ELSE RETURN b; END IF; 
END 

MySQL mang lại cho tôi một lỗi:

FUNCTION max already exists

Tôi thực sự phải từ bỏ tên riêng biệt với các chức năng như max_tinyint, max_int, max_date, max_datetime, v.v ...?

Thậm chí sẽ dễ dàng hơn nếu tôi có thể tạo một hàm chấp nhận các loại tùy ý làm tham số.

+0

Câu trả lời quái gở sẽ là MySQL đã có một hàm MAX. ... –

+0

Cuối cùng thì sao !? Kể từ khi? (Bạn không có nghĩa là chức năng tổng hợp, bạn? Đó là một điều hoàn toàn khác nhau.) – AndreKR

+0

Vâng, tôi DID có nghĩa là chức năng tổng hợp, nhưng nó có một chức năng lớn nhất –

Trả lời

12

mysql không hỗ trợ quá tải chức năng. Vì vậy, cách duy nhất cho bạn là để tạo ra các chức năng với tên gọi khác nhau

UPD: và, vâng, mysql có GREATEST() chức năng để làm những gì bạn muốn

+0

OMG, tôi đã sử dụng MySQL trong nhiều năm. Làm thế nào điều này có thể né tránh tâm trí của tôi quá lâu? Cảm ơn bạn, cảm ơn bạn, cảm ơn bạn. – AndreKR

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