Oracle
將(逗號分隔)-但單個參數傳遞給游標
我必須選擇傳遞給游標的給定字元串(用逗號分隔的值)。可以通過單個變數傳遞多個值。我的程式碼有點像:
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