首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何拆分传递给pl sql过程的参数值

如何拆分传递给pl sql过程的参数值
EN

Stack Overflow用户
提问于 2015-05-06 12:22:28
回答 3查看 166关注 0票数 1

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

"XXX_Test,AL LDG,测试,测试,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”等

它是一个单参数值,这里每个字符串值用空格隔开,上面的输入值将从CA工具(调度工具)传递给我的pl sql过程的输入参数

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

代码语言:javascript
复制
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编程中达到这个要求呢?有人能帮我这个忙吗?

谢谢

EN

回答 3

Stack Overflow用户

发布于 2015-05-06 14:44:18

像这样的查询可以做到这一点:

代码语言:javascript
复制
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))))

其思想是为分层查询的每个级别提取参数的每个匹配项

票数 1
EN

Stack Overflow用户

发布于 2015-05-06 14:27:37

尝尝这个

代码语言:javascript
复制
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;
票数 0
EN

Stack Overflow用户

发布于 2015-05-07 00:33:27

执行计数,允许可能的空参数。不知道这是不是一个问题:

代码语言:javascript
复制
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;

应用于拆分值,同时去掉双引号并保留空参数(假设您将继续处理逗号分隔的列表):

代码语言:javascript
复制
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, '".*?"');

编辑:我从你发布的另一个问题中看到,你需要保留双引号。在这种情况下,匹配的模式应该是'(".*?")‘

然后,在你有了你的参数列表之后,如果你想解析它(也允许NULLS );这会得到第五个项目,例如:

代码语言:javascript
复制
SELECT REGEXP_SUBSTR('XXX_Test,,Test,Test,false,2,2', '([^,]*)(,|$)', 1, 5, NULL, 1)  from dual;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30067489

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档