Plsql 无法将多个参数传递给PL/SQL游标

Plsql 无法将多个参数传递给PL/SQL游标,plsql,Plsql,我需要将一组值传递给游标 例如: 游标定义为 CURSOR cur_fetch_records ( v_shop_name VARCHAR2 ) IS SELECT customer_name from w_customer_d where shipping_location IN v_shop_name; 其中光标参数v_shop_name的值类似于“A”、“B”、“C” 现在,当我打开游标并传递该参数时,问题就出现了 光标打开为: OPEN cur_fe

我需要将一组值传递给游标

例如:

游标定义为

CURSOR cur_fetch_records (
    v_shop_name VARCHAR2
) IS SELECT
    customer_name 
    from w_customer_d where 
    shipping_location IN v_shop_name;
其中光标参数v_shop_name的值类似于“A”、“B”、“C”

现在,当我打开游标并传递该参数时,问题就出现了

光标打开为:

OPEN cur_fetch_records('A', 'B', 'C');
编译器将其视为多个参数,因为值由逗号分隔。
我到处都找过了,但找不到传递参数的方法,该参数在SQL语句的WHERE in子句中使用

如果传入的参数是单个字符串,则不能期望SQL引擎将其解释为列表。相反,您应该传入一个数组。下面是一个使用典型员工表的示例:

CREATE TYPE names_t IS TABLE OF VARCHAR2 (100)
/

DECLARE
   CURSOR cur_fetch_records (v_shop_names names_t)
   IS
      SELECT last_name
        FROM hr.employees
       WHERE last_name IN (SELECT * FROM TABLE (v_shop_names));

   l_names   names_t := names_t ('King', 'Ande', 'Bell');
   l_name    hr.employees.last_name%TYPE;
BEGIN
   OPEN cur_fetch_records (l_names);

   FETCH cur_fetch_records INTO l_name;

   DBMS_OUTPUT.put_line (l_name);

   CLOSE cur_fetch_records;
END;
/
这里有一个简单的例子,你可以很容易地玩这个