【发布时间】:2022-01-08 13:45:09
【问题描述】:
我已经定义了这个函数:
CREATE OR REPLACE FUNCTION oz_hire_duration(hiredate IN DATE)
RETURN VARCHAR2
IS workexperience VARCHAR2(30);
BEGIN
workexperience := TRUNC(MONTHS_BETWEEN(SYSDATE, hiredate)/12) || 'years ' ||
MOD(TRUNC(MONTHS_BETWEEN(SYSDATE, hiredate)), 12) || ' month '||
TRUNC(SYSDATE - ADD_MONTHS(hiredate, TRUNC(MONTHS_BETWEEN(SYSDATE, hiredate)))) || 'days';
RETURN workexperience;
END;
我不知道为什么它总是给我错误,有人可以帮忙吗?
这是我在编译这个函数时得到的错误信息:
ORA-06575:包或函数 OZ_HIRE_DURATION 处于无效状态
错误:FUNCTION OZ_HIRE_DURATION 行/列:8/21 PLS-00103: 在预期以下情况之一时遇到符号“-”:
. ( ) , * @ % & = - + < / > at in is mod remainder not rem => <an exponent (**)> <> or != or ~= >= <= <> and or default like like2 like4 likec as between from using || multiset member submultiset The symbol ". was inserted before "-" to continue.
谢谢
【问题讨论】:
-
“持续时间(年、月、日)”没有明确定义。例如:从 2019 年 2 月 28 日到 2020 年 2 月 29 日 - 那是一年零一天,还是正好是一年?您必须为所有此类例外情况指定一个非常清晰、明确的定义。除了不幸的是,没有这样的规则集同时涵盖所有可能的情况并且不自相矛盾。所以……祝你这项任务好运!
-
它编译并运行良好(DBFiddle)。