2012-01-12 1 views
5

Quando cerco di creare funzioni memorizzate con lo stesso nome, ma firme diverse:Overload di MySQL memorizzati funzioni

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 mi dà un errore:

FUNCTION max already exists

Devo veramente dare nomi distinti alle funzioni come max_tinyint, max_int, max_date, max_datetime, ecc.?

Ancora più semplice sarebbe se potessi creare una funzione che accetta tipi arbitrari come parametri.

+0

La risposta snarky sarebbe che MySQL ha già una funzione MAX. ... –

+0

Finalmente !? Da quando? (Non intendi la funzione aggregata, vero? È tutta un'altra cosa.) – AndreKR

+0

Beh, ho inteso la funzione di aggregazione, ma ha una funzione più grande –

risposta

12

mysql non supporta l'overloading delle funzioni. Quindi l'unico modo per voi è quello di creare funzioni con nomi diversi

UPD: e, sì, MySQL ha GREATEST() funzione per fare ciò che si vuole

+0

OMG, uso MySQL da anni. Come è potuto evadere la mia mente per così tanto tempo? Grazie, grazie, grazie. – AndreKR