如何形成oracle函数 - TIMESTAMP输入 -Date Math - Number Return

How to form oracle function - TIMESTAMP input -Date Math - Number Return

我正在尝试创建一个 oracle 函数,该函数采用 TIMESTAMP 输入,计算该时间戳与今天之间的天数,以及 returns 该数字。我没有正确构建它,也不确定如何修复:

create or replace FUNCTION "DAYSSINCEOPENDATE" (OPENDATE IN TIMESTAMP) 
   RETURN NUMBER
   AS
   retval  NUMBER;

        BEGIN
           SELECT (SYSDATE - CAST(OPENDATE AS DATE) FROM DUAL)) into retval;
           return retval;
        END;

感谢任何帮助。谢谢!

正如@Aleksej 在评论中所说,the order of your clauses is incorrect;你需要

SELECT SYSDATE - CAST(OPENDATE AS DATE) into retval FROM DUAL;

所以:

create or replace FUNCTION "DAYSSINCEOPENDATE" (OPENDATE IN TIMESTAMP) 
   RETURN NUMBER
   AS
   retval  NUMBER;

        BEGIN
           SELECT SYSDATE - CAST(OPENDATE AS DATE) into retval FROM DUAL;
           return retval;
        END;
/

select DAYSSINCEOPENDATE(timestamp '2018-01-01 12:13:14.5') from dual;

DAYSSINCEOPENDATE(TIMESTAMP'2018-01-0112:13:14.5')
--------------------------------------------------
                                        204.773368

虽然您实际上并不需要 retval 变量或针对 dual 的查询;你可以将其简化为

create or replace FUNCTION "DAYSSINCEOPENDATE" (OPENDATE IN TIMESTAMP) 
RETURN NUMBER
AS
BEGIN
   return SYSDATE - CAST(OPENDATE AS DATE);
END;
/

select DAYSSINCEOPENDATE(timestamp '2018-01-01 12:13:14.5') from dual;

DAYSSINCEOPENDATE(TIMESTAMP'2018-01-0112:13:14.5')
--------------------------------------------------
                                        204.773368