1
我寫了兩個函數,數據類型的轉換在Oracle中,並在SELECT語句中稱這些在一個巨大的表是這樣的:PL/SQL函數導致「沒有更多的數據從套接字錯誤讀」
SELECT
safe_to_number(sid_day) sid_day,
safe_to_number(albumid) album_id,
safe_to_number(sid_album) sid_album,
safe_to_number(sid_artist) sid_artist,
safe_to_number(sid_channel) sid_channel
FROM big_table_with_data;
在數據庫運行一段時間後,我得到了「沒有更多數據要從套接字錯誤中讀取」,並且我需要重新啓動Oracle SQL開發人員以再次訪問數據庫。
爲什麼會出現此錯誤,並且有沒有辦法編寫PL/SQL函數來避免此錯誤?
我已經實現的功能是:
CREATE OR REPLACE FUNCTION
safe_to_number (p varchar2)
RETURN number
IS
retval number;
BEGIN
IF p IS NULL THEN
retval := null;
ELSE
retval := safe_to_number(p);
END IF;
return retval;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('Could not change value to number');
retval := null;
return retval;
END;
和
create or replace function is_a_timestamp
(p_str in varchar2
, p_mask in varchar2)
return timestamp
is
d date;
begin
d := to_timestamp(p_str, p_mask);
return d;
exception
when others then
DBMS_OUTPUT.PUT_LINE('Could not change value to timestamp');
return null;
end;
你真的是'safe_to_number()'進行遞歸調用本身,永遠不會消失?還是應該調用'to_number()'?如果這是你真正擁有的,我猜數據庫服務器會因爲耗盡資源而導致你的會話被中止...... –
不,我不是故意這樣做,但我現在可以看到問題出在哪裏。謝謝您的幫助。 – olovholm