Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle PL SQL过程需要修改以接受具有所有类型字符和拆分的数组_Sql_Regex_Oracle_Plsql_Oracle11g - Fatal编程技术网

Oracle PL SQL过程需要修改以接受具有所有类型字符和拆分的数组

Oracle PL SQL过程需要修改以接受具有所有类型字符和拆分的数组,sql,regex,oracle,plsql,oracle11g,Sql,Regex,Oracle,Plsql,Oracle11g,我有一个程序PUSH_DATA,它以以下格式获取输入数据: ["value 1","value 2","value 3","value n"] 所有详细信息都可以在末尾的db fiddle链接中找到 然后,它将逗号分隔的值拆分为目标表的数据库列 现在的问题是,输入字符串是由最终用户传递的,他有时会在输入字符串之间引入多个双引号,主要的拆分标准是基于双引号的 这个过程在这里以fiddle的形式出现,最后传递了一个st

我有一个程序PUSH_DATA,它以以下格式获取输入数据:

["value 1","value 2","value 3","value n"]
所有详细信息都可以在末尾的db fiddle链接中找到

然后,它将逗号分隔的值拆分为目标表的数据库列

现在的问题是,输入字符串是由最终用户传递的,他有时会在输入字符串之间引入多个双引号,主要的拆分标准是基于双引号的

这个过程在这里以fiddle的形式出现,最后传递了一个string示例来演示这个问题

因此,当程序被传递为:

BEGIN
PUSH_DATA(110,'["Project title afor BYU heads","The values are,\n "exactly" up to the requirement and analysis done by the team.
Also it is difficult to,\n prepare a scenario notwithstanding the fact it is difficult. This user story is going to be slightly complex however it is up to the team","Active","Disabled","25 tonnes of fuel","www.examplesites.com/html.asp&net;","Apprehension","","","","25","Stable"]');
END;
/
结果如预期:

当字符串以额外引号传递时,如下所示:

BEGIN
PUSH_DATA(110,'[""Project title afor BYU heads"","The values are,\n "exactly" up to the requirement and analysis done by the team.
Also it is difficult to,\n prepare a scenario notwithstanding the fact it is difficult. This user story is going to be slightly complex however it is up to the team","Active","Disabled","25 tonnes of fuel","www.examplesites.com/html.asp&net;","Apprehension","","","","25","Stable"]');
END;
/
由于额外的引号,结果意外:

要求是忽略引号内的任何特殊字符,忽略应显示且不计算的字符,如应忽略的额外双引号或a/或a\以及按原样传递的字符串

所以如果传递一个值,比如,Hi Theres,No 输出应为Hi theres,否

因此,我需要对解决方案进行修改,以便

使用现有的正则表达式条件和添加条件在双引号中包含双引号 或者,不要将参数作为varchar传递,而可以使用array或任何其他适合该场景的解决方案。 摆弄所有细节:

(select data_string from dual),
    rcte (id, data, lvl, result)
    AS (
         SELECT p_id, data, 1,regexp_substr(data,
                '(".*?")(,|\])', 1, 1, 'n', 1) result
           FROM (select data_string data from input) 
        UNION ALL
         SELECT id, data, lvl + 1,
                regexp_substr(data, '(".*?")(,|\])', 1, lvl + 1, 'n', 1)
           FROM rcte
        WHERE lvl <= regexp_count(data, '(".*?")(,|\])',1,'n')
       )
从first select查询中删除了regex_replace,而不是直接使用数据

当我们在正则表达式中使用点时,为了匹配新行字符,将regexp_substrdata,'.*?,'\]',1,1,'n',1 null替换为'n'。此正则表达式执行延迟匹配,直到找到或]字符。]是最后一个字符串

regexp_countdata,'.?,'.\]',1,'n'更改了regex,并将null替换为'n'以进行换行符匹配


这对你有用吗?当然,让我试试,我会让你知道的!总的来说,它工作得很好,但在实际数据中,它取代了双引号,即abcas/abc/。这可以被反驳吗?你正在用空字符串替换所有的。可能是因为这个原因吗?你能给我造成这个问题的dbfiddle链接或示例输入吗?还有一个问题:“*?,|]]”这里做什么?它是否也被提及被忽略,或者它是否替换了额外的引号?很抱歉,这是为了理解正在做什么,我还添加了regex以删除方括号[]。你是如何处理这些问题的?对正则表达式不是很好,所以我这么问。