Oracle PL/SQL中两个DATE类型变量相减报ORA-06502错误的原因是什么?
报错原因
这个报错和DATE类型减法本身无关,是运算符优先级与执行顺序导致的逻辑错误:
在Oracle PL/SQL中,字符串连接符||和加减运算符+/-属于同一运算优先级,同级运算符默认按从左到右的顺序执行。你写的代码:
dbms_output.put_line('The elapsed time is: ' || l_current_date - l_zero_date);
会被优先执行左侧的'The elapsed time is: ' || l_current_date运算:这一步会把DATE类型的l_current_date隐式转换为字符串,拼接得到一个完整的字符串结果,接下来再执行[拼接得到的字符串] - l_zero_date运算,此时Oracle尝试将非数值格式的字符串转换为数字参与减法运算,就触发了字符转数字的报错。
你之前的测试代码可以正常运行,是因为测试代码中||左侧直接是减法运算b-a,没有前置字符串拼接逻辑,不会触发执行顺序问题。
修复方案
将DATE减法的部分用括号包裹,强制优先执行减法运算即可:
dbms_output.put_line('The elapsed time is: ' || (l_current_date - l_zero_date));
DATE类型相减得到的结果是两个日期相差的天数,你可以根据需要乘以24、2460、2460*60转换为小时、分钟、秒单位。
内容的提问来源于stack exchange,提问作者user3138025
相关产品推荐
相关产品推荐

