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

それはあなたが関数を呼び出す方法ではありません。オラクルでは、常に何かから選択する必要があります。データを選択する実際のテーブルがない場合は、組み込みの単一行テーブルを使用します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

2 桁の年でRRはなく、おそらく使用する必要がありますが、ドキュメントを確認してください。YY

于 2013-04-11T10:11:42.007 に答える