この関数は、日付を別の形式で返すと想定されています。それだけです。何が悪いのか見えません!
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;
それはあなたが関数を呼び出す方法ではありません。オラクルでは、常に何かから選択する必要があります。データを選択する実際のテーブルがない場合は、組み込みの単一行テーブルを使用します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