пытается разобрать строку в таблице в Oracle - PullRequest
0 голосов
/ 20 ноября 2018

Я пытаюсь отправить строку, подобную этой, в хранимую процедуру 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.

Если кто-нибудь может предложить лучший способ сделать это.Я был бы рад или просто помог бы мне исправить мой код

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