Oracle - PLS-00382:表达式在减去日期时类型错误

时间:2016-01-22 22:40:23

标签: oracle function date compiler-errors subtraction

我在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

有关于该功能可能出现什么问题的想法吗?

2 个答案:

答案 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;