我在Oracle
中编译以下函数时遇到了麻烦CREATE OR REPLACE FUNCTION fn1
return binary_double
as
Fecha DATE;
Dias binary_double;
begin
dbms_output.put_line(CAST(TRUNC(CURRENT_DATE,'DD') AS DATE) - cast(current_timestamp as date));
return Dias;
end;
导致错误
Error(8,27): PLS-00382: expression is of wrong type
但是在函数体外部运行相同的表达式
select CAST(TRUNC(CURRENT_DATE,'DD') AS DATE) - cast(current_timestamp as date) from dual
给出预期结果 - 两个日期之间的天数
-0.0607060185185185185185185185185185185185
有关于该功能可能出现什么问题的想法吗?
答案 0 :(得分:2)
使用:
begin
dbms_output.put_line(TRUNC(CURRENT_DATE,'DD') - cast( current_timestamp as date));
end;
/
Current_date返回数据类型DATE
的值
Trunct也会返回DATE
所以你试图将DATE类型转换为DATE类型。
答案 1 :(得分:2)
似乎PL / SQL在转换为相同类型的类型时存在问题。
CURRENT_DATE
返回DATE
数据类型,因此您将其转换为相同的类型。它适用于SQL,但不适用于PL / SQL。只需删除投射:
CREATE OR REPLACE FUNCTION fn1
return binary_double
as
Fecha DATE;
Dias binary_double;
begin
dbms_output.put_line(TRUNC(CURRENT_DATE,'DD') - cast(current_timestamp as date));
return Dias;
end;