Параметр Oracle, разделенный запятыми, для строк и объединения с другими таблицами - PullRequest
0 голосов
/ 09 августа 2011

Я использую Oracle 10g. Мой сценарий:

Я получаю более 4000 записей в виде строки, разделенной запятыми ('ord0000, ord0001, ord0002, ......') в качестве параметра. Мне нужно сравнить эти значения с таблицей1 и выяснить соответствующий набор записей.

Для этой цели я создал следующую функцию:

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;

Теперь, когда я использовал эту функцию для соединения с моим table1 в процедуре, как показано ниже:

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 идентификаторов, таких как ('ord0000, ord0001, ord0002, ......'), но когда он содержит больше записей, я получаю сообщение об ошибке «ORA 01460: запрошено невыполненное или необоснованное преобразование.»

Я не понимаю, что вызывает эту ошибку. Есть идеи? ИЛИ есть ли лучший способ выполнить эту задачу.

Ответы [ 2 ]

1 голос
/ 09 августа 2011

Первоначально я думал, что вы переполняете свой varchar2 (32767), но быстрый взгляд на ваши примеры идентификаторов показывает, что вы не должны максимизировать это рано (400 идентификаторов).

Быстрый гугл ошибкипривел меня на этот форум в OTN: http://forums.oracle.com/forums/thread.jspa?threadID=507725&start=15&tstart=0

и на этот пост в блоге: http://oraclequirks.blogspot.com/2008/10/ora-01460-unimplemented-or-unreasonable.html

, который указывает, что это может быть ошибка оракула

0 голосов
/ 09 августа 2011

Если это ошибка при использовании процедуры PL / SQL, вы можете просто разбить строку как часть встроенного представления.Нечто подобное

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...