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;
/
这里有一个简单的例子,你可以很容易地玩这个