每次迭代在过程内部传递值对

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 示例。