我正在使用Oracle 10g。 我的情景:Oracle逗號將參數分隔到行並與其他表連接
我在逗號分隔的字符串('ord0000,ord0001,ord0002,......')中獲取了4000多條記錄作爲參數。我需要將這些值與table1進行比較,並找出匹配的記錄集。
出於這個目的,我創建瞭如下功能:
function get_split_values (
csv_string varchar2
) return split_table pipelined
as
Delimit_String varchar2(32767) := csv_string;
Delimit_index integer;
begin
loop
Delimit_index := instr(delimit_string,',');
if Delimit_index > 0 then
pipe row(substr(delimit_string,1,delimit_index-1));
delimit_string := substr(delimit_string,delimit_index+1);
else
pipe row(delimit_string);
exit;
end if;
end loop;
return;
end get_split_values;
現在,當我用這個功能我在下面的程序表1,加盟:
create procedure abc (parameter_csv varchar2,...)
as
begin
open cursor for
select t.col1 from table1 t join table(get_split_values(parameter_csv)) x
on x.column_value = t.col1;
...
end abc;
它工作正常時, parameter_csv有大約300或400個ID('ord0000,ord0001,ord0002,......'),但是當它包含更多的記錄時,我得到了錯誤 「ORA 01460:未實現或不合理的轉換請求。
我不明白是什麼引發了這個錯誤。有任何想法嗎? 或者有什麼最好的方法來完成這項任務。
什麼是最小的(近似)產生誤差所需的條目數? – Dan