任何人都可以看到这个简单的Oracle函数有什么问题吗?
假设函数以不同的格式返回日期,仅此而已。看不出有什么问题任何人都可以看到这个简单的Oracle函数有什么问题吗?,oracle,oracle10g,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; 这不是调用函数的方式。在Oracle中,您必须始终从某些内
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;
这不是调用函数的方式。在Oracle中,您必须始终从某些内容中进行选择。如果没有可从中选择数据的实际表,请使用内置的单行表DUAL: 如果它是较大查询的一部分,则可以传入列值:
select get_cpd(some_column) from some_table;
如果您是从另一个PL/SQL块或其他客户机调用它,则不必使用select,例如
。。。但这是假设您将使用该值执行某些操作,而不仅仅是显示它
顺便说一句,您可以简化函数以利用调用_char的方式:
您可能还应该在两位数的年份内使用RR而不是YY,但请检查文档。首先,您应该告诉我们您认为它错误的原因。它似乎没有任何问题-它编译并运行。虽然YDDD看起来很奇怪,因为它给出了一个位数的年份;获取cpd'13/04/11'给出的3101。。。那么,你认为什么是错误的,为什么?问题可能在于您如何称呼它,例如,将日期而不是VARCHAR2作为参数传递?使用YY有点危险,并且您不需要cpd变量,但这些都不一定是错误。您好,请回答,当我调用它时,会出现一个错误,表明select语句不完整。我这样称呼它:从get_CPD'13/04/10'中选择*;实际上,确切的错误是:ORA-00933:SQL命令没有正确结束
select get_cpd(some_column) from some_table;
declare
cpd varchar2(4);
begin
cpd := get_cpd('13/04/10');
end;
/
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