ORA-06575: Package or function SPLIT is in an invalid state

oracle中的語句報錯:ORA-06575: Package or function SPLIT is in an invalid state

我的語句是這樣的:

select * from exams where DISABLED='N' and id in (select * from table(split((select exams from categorys where id=${sample.categoryId}),','))) order by order_no,id

去網上搜意思說split這個函數用錯了。可是我在網上看了用法明明就是這麼用的,只是名字不太同是fn_split當時以爲那是老版的,現在升級了,所以在猜可能不是這個原因,以爲是傳值或者別的問題,找了半天還是沒找到。沒辦法,繼續在網上看。看了好久。突然發現oracle根本就沒有字符串分割這個函數,我搜出來的那些是自己寫的,所以纔會有名字不同這個原因。找到錯誤就很好就解決了:

自己寫一個字符串分割函數:

create or replace type type_split as table of varchar2(500);
 create or replace function split
(
p_list varchar2,
p_sep varchar2 := ';'
) return type_split pipelined
is
l_idx pls_integer;
v_list varchar2(500) := p_list;
begin
loop
l_idx := instr(v_list,p_sep);
if l_idx > 0 then
pipe row(substr(v_list,1,l_idx-1));
v_list := substr(v_list,l_idx+length(p_sep));
else
pipe row(v_list);
exit;
end if;
end loop;
return;
end split;

執行後再用代碼:

select * from table(split('121212;dfd;dfd;vvv;llll;對方答覆',';'));

測試一下,發現就沒有報錯了。所以說有時候要認真看看。有時間多多瞭解基礎知識。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章