任何人都可以看到这个简单的Oracle函数有什么问题?

时间:2013-04-11 09:55:30

标签: oracle oracle10g

该函数假设以不同的格式返回日期,即全部。看不出有什么问题!

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;

1 个答案:

答案 0 :(得分: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两位数,但请查看文档。