Я пытаюсь отправить строку, подобную этой, в хранимую процедуру Oracle: это ужасный способ, но я не могу найти другой способ.
1,2,3; 4, 5,6; 7,8,9
или
1,2,3,4; 5,6,7,8
и я хочу проанализировать ее в определенной таблице и вернуть ее, чтобы я мог использовать ее с функциями объединения или объединения таким образом, чтобы ',' был разделителем столбцов, а ';'является разделителем строк.
при условии, что строка имеет правильный синтаксис
мой код прямо сейчас:
Procedure SplitStringToTable
(
p_stringToSplitToRows in varchar2,
p_stringToSplitToColumns in varchar2,
p_rowDelimeter in varchar2,
p_columnDelimeter in varchar2,
p_columnAmount in number,
cur_out out CurType
)
IS
selectArgument varchar(20);
i number;
type t_temp is table of TEMPHELP%rowtype; -- this is a table with one column
myTemp t_temp;
BEGIN
select * bulk collect into myTemp from
(
select * from
(
select regexp_substr(p_stringToSplitToRows, '[^'+p_rowDelimeter+']+',1,level) as a from dual
connect by regexp_substr(p_stringToSplitToRows, '[^'+p_rowDelimeter+']+',1,level) is not null
)
)
selectArgument :='';
i:=1;
loop
--ERROR HERE\
selectArgument:= selectArgument+' '+regexp_substr(myTemp , '[^'+p_columnDelimeter +']+',1,i);
--ERROR HERE/
if i=p_columnAmount then
selectArgument:= selectArgument;
else
selectArgument:=selectArgument+',';
end if;
if (i>p_columnAmount) then
exit;
else
i:=i+1;
end if;
end loop;
open cur_out for
select selectArgument
from
(
select regexp_substr(p_stringToSplitToRows, '[^'+p_rowDelimeter+']+',1,level) as a from dual
connect by regexp_substr(p_stringToSplitToRows, '[^'+p_rowDelimeter+']+',1,level) is not null
)
END;
Я протестировал регулярное выражение с этой строкой:'1,2,3; 4,5,6; 7,8,9', и так оно и работало:
select regexp_substr(A, '[^,]+',1,1),regexp_substr(A, '[^,]+',1,2),regexp_substr(A, '[^,]+',1,3)
from
(
select regexp_substr('1,2,3;4,5,6;7,8,9', '[^;]+',1,level) as A from dual
connect by regexp_substr('1,2,3;4,5,6;7,8,9', '[^;]+',1,level) is not null
)
проблема, которую я получаю сейчас,
неверный номер или типы аргументов при вызове 'REGEXP_SUBSTR'
Я не уверен, что это вообще возможно,
главная цель - это способ отправки DataTable изC # к хранимой процедуре Oracle.
Если кто-нибудь может предложить лучший способ сделать это.Я был бы рад или просто помог бы мне исправить мой код