0

该函数假设以不同的格式返回日期,仅此而已。看不出有什么问题!

CREATE OR REPLACE
FUNCTION get_cpd(a_date in varchar2)return varchar2
IS
cpd varchar2(4);
BEGIN
SELECT TO_CHAR(TO_DATE(a_date,'YY/MM/DD'),'YDDD') INTO cpd FROM DUAL;
RETURN cpd;
END get_CPD;
4

1 回答 1

1

这不是你调用函数的方式。在 Oracle 中,您必须始终从某些东西中进行选择。如果您没有要从中选择数据的实际表,请使用内置的单行表DUAL

select get_cpd('13/04/10') from dual;

如果它是更大查询的一部分,那么您可以传入列值:

select get_cpd(some_column) from some_table;

如果您从另一个 PL/SQL 块或其他客户端调用它,那么您不必拥有select,例如

declare
    cpd varchar2(4);
begin
    cpd := get_cpd('13/04/10');
end;
/

...但这假设您将使用该值做某事,而不仅仅是显示它。

顺便说一句,您可以简化函数以利用这种调用方式to_char

create or replace function get_cpd(a_date in varchar2)
return varchar2 is
begin
    return to_char(to_date(a_date,'YY/MM/DD'),'YDDD');
end get_cpd;
/

select get_cpd('13/04/11') from dual;

GET_CPD('13/04/11')
--------------------------------------------------------------------------------
3101

您可能还应该使用RR而不是YY两位数的年份,但请查看文档。

于 2013-04-11T10:11:42.007 回答