Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
任何人都可以看到这个简单的Oracle函数有什么问题吗?_Oracle_Oracle10g - Fatal编程技术网

任何人都可以看到这个简单的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