将(逗号分隔)-但单个参数传递给游标

bof*_*nda 2 oracle plsql cursors

我必须选择传递给光标的给定字符串(用逗号分隔的值)。可以有多个值可以通过单个变量传递。我的代码有点像:

CURSOR My_Cursor( vsStr1 )
  IS
  SELECT some_field
    FROM some_table
   WHERE txtfield1 IN ( vsStr1 );    --this field is varchar2 type

vsStr1 varchar2(100) := '01, 25, 80, 100';
Run Code Online (Sandbox Code Playgroud)

如何传递该变量正确性?任何帮助,将不胜感激。

Bal*_*app 5

我知道的最简单的小技巧是xmltable(). 随着xmltable()你可以转换一个逗号分隔值列表插入行,例如:

select * from xmltable('1, 2, 3')

COLUMN_VALUE
------------
1
2
3
Run Code Online (Sandbox Code Playgroud)

注意列是如何column_value自动命名的。这是一XMLType列,您需要对其进行转换才能将其与常规类型进行比较,例如(column_value).getnumberval()(column_value).getstringval()

现在使用它,游标可以这样编码:

set serveroutput on
declare
  l_parameters varchar2(50) := '101, 102, 103, 104';

  cursor my_cursor (params varchar2)
  is
  select employee_id, first_name, last_name from hr.employees
  where employee_id in
    (select (column_value).getnumberval() from xmltable(params));
begin
  for c in my_cursor(l_parameters) loop
    dbms_output.put_line(c.employee_id || ': ' || c.first_name || ', ' || c.last_name);
  end loop;
end;
/

101: Neena, Kochhar
102: Lex, De Haan
103: Alexander, Hunold
104: Bruce, Ernst
Run Code Online (Sandbox Code Playgroud)