私は2つの機能を持っています。切り捨てネストされた関数を呼び出すときの日付の値が正しくない
- fn_validate_date
- fn_validation
fn_validate_dateコード:
CREATE DEFINER=`root`@`localhost` FUNCTION `fn_validate_date`(
`dt_date` DATE
)
RETURNS date
LANGUAGE SQL
NOT DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT 'Returns the associated value of given attribute for given employee for a particular date.'
BEGIN
SET dt_date = IF(dt_date IS NULL OR dt_date ='', CURRENT_DATE, dt_date);
RETURN dt_date;
END
fn_validationコード:今、私は以下のようfn_validate_date呼び出していたときに
CREATE DEFINER=`root`@`localhost` FUNCTION `fn_validation`(
`dt_date` DATE
)
RETURNS date
LANGUAGE SQL
NOT DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT ''
BEGIN
RETURN fn_validate_date(dt_date);
END
SELECT `fn_validate_date`(null);
これはうまくいきますが、fn_validationを呼び出すとエラーになります。
SELECT `fn_validation`(null);
fn_validate_dateを呼び出している間、私はエラーを取得しなかった理由私の質問はありますか?
しかし、fn_validate_dateを呼び出すときにエラーが発生することはありません。 fn_validate_dateを呼び出すfn_validationを呼び出している間にエラーが発生しています。 – Jack
関数が別の関数から呼び出されたとき、MySQLはif節を短絡しません。コードを修正するだけで大丈夫です。 – slaakso
近い見通しでは、MySQLが文字列を短絡問題ではなく日付に変換する方法と時間の違いによく似ています。とにかく、日付と空の文字列を比較しないでください。 – slaakso