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

Oracle - PLS-00382: expression is of wrong type in subtracting dates

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

对于该函数可能存在的问题有什么想法吗?

使用:

begin
  dbms_output.put_line(TRUNC(CURRENT_DATE,'DD')  - cast( current_timestamp as date));
end;
/

Current_date returns 数据类型为 DATE
的值 截断也 returns DATE.
所以您正在尝试将 DATE 类型转换为 DATE 类型。

似乎 PL/SQL 将类型转换为相同类型时出现问题。

CURRENT_DATE returns 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;