Oracle PL/SQL计算员工在职时长函数编译报PLS-00103错误求助
核心报错原因
你遇到的PLS-00103错误90%以上的概率是代码中使用了全角符号/不可见特殊字符:
- 错误指向第8行第21列的
-符号,大概率你输入这个减号时不小心切换到了全角输入模式,输入了全角减号-,Oracle无法识别全角运算符,因此触发语法错误。 - 少数情况是复制粘贴代码时带入了编辑器的隐藏特殊字符,同样会被Oracle判定为非法符号。
修复方案
- 手动重新编写所有运算符部分,确保所有减号、括号、斜杠都是半角英文符号,不要直接复制原有代码的对应片段
- 可以优化输出格式,给单位前加空格让结果更易读
- 编译函数时末尾加
/触发完整编译
修正后的可运行代码
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) || ' months '|| TRUNC(SYSDATE - ADD_MONTHS(hiredate, TRUNC(MONTHS_BETWEEN(SYSDATE, hiredate)))) || ' days'; RETURN workexperience; END; /
测试验证
编译成功后执行以下语句即可验证效果:
SELECT oz_hire_duration(DATE '2020-01-15') AS work_duration FROM DUAL;
内容的提问来源于stack exchange,提问作者olivia zhai
相关产品推荐
相关产品推荐

