每次迭代在过程内部传递值对
Passing value pairs inside procedure with each iteration
我正在创建一个过程,其中一个输入参数是:
1 - 以分号分隔的数字串
for example: lv_string VARCHAR2(100) := '10; 20; 30';
然后我有一个获取数字的游标
for example: lv_cur that stores values 1, 2, 3
我有一个程序,我在寻找如何通过的解决方案时遇到问题:
1. iteration
procedure process_input(pin_one => first value from lv_string,
pin_two => first value from lv_cur
)
2. iteration
procedure process_input(pin_one => second value from lv_string,
pin_two => second value from lv_cur
)
3. iteration
procedure process_input(pin_one => third value from lv_string,
pin_two => third value from lv_cur
)
你能帮我找到解决这个问题的方法吗?有没有办法编写一个游标来 return 这些值对?
关键组件是创建一个例程(可能只是一个查询),该例程可以将分隔的字符串解析为单独的数字和 return 结果。最简单的方法是创建一个函数,该函数采用带分隔符的列表和指定的分隔符以及 returns 数字集合。同时创建一个模式级别的集合(oracle 提供了一些你可以使用的集合)。
-- create a schema level collection of numbers
create or replace
type list_of_numbers_t
is table of number;
-- create a function that parses a string containing a delimited list on numbers
-- and returns the collection defined above
create or replace
function parse_delimited_list_of_numbers
(list_of_delimited_numbers_in varchar2
,delimiter_in varchar2
)
return list_of_numbers_t
is
l_parsed_numbers list_of_numbers_t;
l_regex_pattern varchar2(16) := '[^<dlm>]+';
begin
l_regex_pattern := replace(l_regex_pattern,'<dlm>',delimiter_in);
select to_number(trim(regexp_substr(list_of_delimited_numbers_in,l_regex_pattern,1,level)))
bulk collect
into l_parsed_numbers
from dual connect by
regexp_substr(list_of_delimited_numbers_in,l_regex_pattern,1,level) is not null;
return l_parsed_numbers;
end parse_delimited_list_of_numbers;
请参阅此处的 test 示例。
我正在创建一个过程,其中一个输入参数是: 1 - 以分号分隔的数字串
for example: lv_string VARCHAR2(100) := '10; 20; 30';
然后我有一个获取数字的游标
for example: lv_cur that stores values 1, 2, 3
我有一个程序,我在寻找如何通过的解决方案时遇到问题:
1. iteration
procedure process_input(pin_one => first value from lv_string,
pin_two => first value from lv_cur
)
2. iteration
procedure process_input(pin_one => second value from lv_string,
pin_two => second value from lv_cur
)
3. iteration
procedure process_input(pin_one => third value from lv_string,
pin_two => third value from lv_cur
)
你能帮我找到解决这个问题的方法吗?有没有办法编写一个游标来 return 这些值对?
关键组件是创建一个例程(可能只是一个查询),该例程可以将分隔的字符串解析为单独的数字和 return 结果。最简单的方法是创建一个函数,该函数采用带分隔符的列表和指定的分隔符以及 returns 数字集合。同时创建一个模式级别的集合(oracle 提供了一些你可以使用的集合)。
-- create a schema level collection of numbers
create or replace
type list_of_numbers_t
is table of number;
-- create a function that parses a string containing a delimited list on numbers
-- and returns the collection defined above
create or replace
function parse_delimited_list_of_numbers
(list_of_delimited_numbers_in varchar2
,delimiter_in varchar2
)
return list_of_numbers_t
is
l_parsed_numbers list_of_numbers_t;
l_regex_pattern varchar2(16) := '[^<dlm>]+';
begin
l_regex_pattern := replace(l_regex_pattern,'<dlm>',delimiter_in);
select to_number(trim(regexp_substr(list_of_delimited_numbers_in,l_regex_pattern,1,level)))
bulk collect
into l_parsed_numbers
from dual connect by
regexp_substr(list_of_delimited_numbers_in,l_regex_pattern,1,level) is not null;
return l_parsed_numbers;
end parse_delimited_list_of_numbers;
请参阅此处的 test 示例。