如何将逗号分隔的值作为字符串参数传递给 Oracle 存储过程?

use*_*500 1 oracle stored-procedures

我正在尝试在 Oracle 中编写一个存储过程,在其中传递字符串值,myString其值类似于 ( 'xxx','yyy') asvarchar并返回一个游标。我的程序如下所示:

create or replace getName (in_myString in varchar, Name_list out refcursor) IS
Begin
    Open cursor for 
       Select Colunm1 from table where columnName in (in_MyString);
Run Code Online (Sandbox Code Playgroud)

但是没有返回任何记录,但我试图单独运行查询它正在返回记录。请任何人都可以帮助我吗?

小智 5

假设参数的输入值是这样的 in_myString := 'xxx,yyy'; 我们可以使用 SQL 正则表达式函数根据逗号分割您的值并将结果列表传递给 IN 子句。

 create or relace getName( in_myString in varchar, Name_list out refcursor)      IS

  Begin

 Open cursor for 
      Select Colunm1 from table where columnName in
          (select regexp_substr(in_myString,'[^,]+', 1, level) from dual
             connect by regexp_substr(in_myString, '[^,]+', 1, level) is not null);
Run Code Online (Sandbox Code Playgroud)

可以在此处找到有关正则表达式的更多信息。