Oracle

將(逗號分隔)-但單個參數傳遞給游標

  • January 7, 2016

我必須選擇傳遞給游標的給定字元串(用逗號分隔的值)。可以通過單個變數傳遞多個值。我的程式碼有點像:

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';

如何傳遞該變數correclty?任何幫助,將不勝感激。

我所知道的最簡單的小技巧是xmltable(). 您可以將xmltable()逗號分隔的值列表轉換為行,例如:

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

COLUMN_VALUE
------------
1
2
3

請注意該列是如何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

引用自:https://dba.stackexchange.com/questions/125494