【发布时间】:2020-05-07 14:02:45
【问题描述】:
我第一次尝试像这样创建一个函数:
create or replace function func_getcreatedtime(p_createdtime varchar2)
return varchar2 as
formatted_time varchar2(1000) := '';
begin
select case formatted_time
when TO_CHAR(sysdate, 'YYYY') = TO_CHAR(p_createdtime, 'YYYY')
then TO_CHAR(p_createdtime, 'Mon DD') || ' at ' || TO_CHAR(p_createdtime, 'HH24:MI') createdtime
else TO_CHAR(p_createdtime, 'Mon DD, YYYY') || ' at ' || TO_CHAR(p_createdtime, 'HH24:MI') createdtime,
end
from dual;
return formatted_time;
end;
并尝试像这样调用此函数:
select t.comments, t.createdtime, func_getcreatedtime(t.createdtime) from postcomment t;
但它显示此错误:
ORA-06575: 包或函数 FUNC_GETCREATEDTIME 处于无效状态
t.createdtime 是30-APR-20 06.59.59.546000 PM 格式,我想格式化这个日期时间。
如果 sysdate 和 t.createdtime 的年份相同,那么我想将其格式化为 Apr 30 at 06:59
如果 sysdate 和 t.createdtime 的年份不同,那么我想将其格式化为 Apr 30, 2020 at 06:59
【问题讨论】:
-
您不需要那里的选择,您可以直接将 to_char 的值分配给变量。至于问题 - 在你的情况下编译失败,因为有几个语法错误
-
你用的是什么开发工具?您需要熟悉它显示编译错误的方式。
-
@WilliamRobertson PL/SQL 开发人员
-
@ShreyasPednekar 绝佳选择。在这种情况下,请确保使用程序窗口来开发功能。初学者的错误是使用 SQL 窗口,它不是为 PL/SQL 代码设计的,也不显示编译错误。