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)
如何传递该变量正确性?任何帮助,将不胜感激。
我知道的最简单的小技巧是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)