這不是你如何調用一個函數。在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
了兩位數字的年份,但檢查文檔。
首先,你應該告訴我們爲什麼你認爲這是錯的。 – Pino 2013-04-11 10:00:33
它似乎沒有錯,它編譯和運行。 'YDDD'看起來很奇怪,因爲它給出了一年的一位數; 'get_cpd('13/04/11')'給出'3101' ...所以你認爲什麼是錯的,爲什麼?問題可能在於你如何調用它(例如,傳遞'DATE'而不是'VARCHAR2'作爲參數)?使用'YY'有點危險,你不需要'cpd'變量,但這些不一定是錯誤。 – 2013-04-11 10:00:55
您好坦克的回覆,我得到一個錯誤,當我稱它聲明選擇語句不完整。 這就是我所說的: select * from get_CPD('13/04/10'); 其實確切的錯誤是: ORA-00933:SQL命令未正確結束 – sergiopuy 2013-04-11 10:07:12