2016-01-22 40 views
1

我有麻烦编译如下功能的Oracle甲骨文 - PLS-00382:表达式是错误的类型在减去日期

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

用途:

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

CURRENT_DATE返回数据类型DATE值
Trunct也返回日期。
所以你试图将DATE类型转换为DATE类型。

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;