Plsql 如何分割传递给pl sql过程的参数值

Plsql 如何分割传递给pl sql过程的参数值,plsql,split,arguments,procedure,Plsql,Split,Arguments,Procedure,我的要求是,用户将值传递给我的一个程序输入参数,格式如下所示 XXX_测试,所有LDG,测试,测试,假,2,2 XXX_FEP,在LDG中,测试1,测试1,假,3,2 XXX_GPP,在LDG中,测试2,测试2,假,3,4 XXX_FGP,在LDG中,测试3,测试3,假,4,4等等 它是单参数值,这里每个字符串值用空格分隔 [上述输入值将从CA Toolscheduling tool传递到my pl sql过程的输入参数] 在pl sql过程中,我需要处理这个值,需要找出有多少个参数是由空格分隔

我的要求是,用户将值传递给我的一个程序输入参数,格式如下所示

XXX_测试,所有LDG,测试,测试,假,2,2 XXX_FEP,在LDG中,测试1,测试1,假,3,2 XXX_GPP,在LDG中,测试2,测试2,假,3,4 XXX_FGP,在LDG中,测试3,测试3,假,4,4等等

它是单参数值,这里每个字符串值用空格分隔 [上述输入值将从CA Toolscheduling tool传递到my pl sql过程的输入参数]

在pl sql过程中,我需要处理这个值,需要找出有多少个参数是由空格分隔的passedString,还需要将属性值拆分为单独的字符串,如下所示

PARAM1 ="XXX_Test,AL LDG,Test,Test,false,2,2"  
PARAM2 ="XXX_Feps,IN LDG,Test1,Test1,false,3,2"  
PARAM3 ="XXX_GPP,IN LDG,Test2,Test2,false,3,4"  
PARAM4 ="XXX_FGP,IN LDG,Test3,Test3,false,4,4" 
在本例中,由于传递了4个字符串,因此计数将为4

我们如何在pl sql编程中实现这一要求?有人能帮我吗

谢谢你试试这个

SELECT REGEXP_SUBSTR('"XXX_Test,AL LDG,Test,Test,false,2,2" "XXX_Feps,IN LDG,Test1,Test1,false,3,2" "XXX_GPP,IN LDG,Test2,Test2,false,3,4" "XXX_FGP,IN LDG,Test3,Test3,false,4,4"','[^ "" ]+', 1, level) 
FROM DUAL
CONNECT BY REGEXP_SUBSTR('"XXX_Test,AL LDG,Test,Test,false,2,2" "XXX_Feps,IN LDG,Test1,Test1,false,3,2" "XXX_GPP,IN LDG,Test2,Test2,false,3,4" "XXX_FGP,IN LDG,Test3,Test3,false,4,4" ', '[^ "" ]+', 1, level) is not null;

这样的查询可以实现以下目的:

WITH params AS (
   SELECT '"XXX_Test,AL LDG,Test,Test,false,2,2" "XXX_Feps,IN  LDG,Test1,Test1,false,3,2" "XXX_GPP,IN LDG,Test2,Test2,false,3,4" "XXX_FGP,IN LDG,Test3,Test3,false,4,4"' param FROM DUAL
)
SELECT REGEXP_SUBSTR(param,'(".+?")',1,LEVEL)
FROM params
CONNECT BY  LENGTH(SUBSTR(param,DECODE(REGEXP_INSTR(param,'(".+?")',1,LEVEL),0,NULL,REGEXP_INSTR(param,'(".+?")',1,LEVEL)))) <= LENGTH(SUBSTR(param,DECODE(REGEXP_INSTR(param,'(".+?")',1,LEVEL),0,NULL,REGEXP_INSTR(param,'(".+?")',1,LEVEL))))

其思想是为每个层次结构提取参数的每个匹配项。查询进行计数,允许可能的空参数。不知道这是否是个问题:

WITH params AS (
   SELECT '"XXX_Test,AL LDG,Test,Test,false,2,2" "" "XXX_GPP,IN LDG,Test2,Test2,false,3,4" "XXX_FGP,IN LDG,Test3,Test3,false,4,4"' param FROM DUAL
)
SELECT REGEXP_COUNT(param, '".*?"')
FROM params;
应用于拆分值,同时剥离双引号并保留空参数假设是,您将继续处理逗号分隔的列表,然后:

WITH params AS (
   SELECT '"XXX_Test,AL LDG,Test,Test,false,2,2" "" "XXX_GPP,IN LDG,Test2,Test2,false,3,4" "XXX_FGP,IN LDG,Test3,Test3,false,4,4"' param FROM DUAL
)
SELECT REGEXP_SUBSTR(param, '"(.*?)"', 1, LEVEL, NULL, 1)
FROM params
CONNECT BY  LEVEL <= REGEXP_COUNT(param, '".*?"');

如果传递的参数为null,则会中断。万一发生这种情况,也许是编辑弄坏了?不会返回当前所需的结果。它在嵌入空间上失败。进行了编辑,以显示如何通过将双引号包含在组中来保留双引号。
SELECT REGEXP_SUBSTR('XXX_Test,,Test,Test,false,2,2', '([^,]*)(,|$)', 1, 5, NULL, 1)  from dual;