我想在一个过程中执行此查询:
PROCEDURE ConvertNo ()
IS
CURSOR get IS
select *
from tab
where xx in (2,3,5,6);
..
..
我应该如何将这些2,3,5,6值传递给程序?
答案 0 :(得分:4)
您可以传递一组数字,然后在查询中使用该数组。为了能够在SQL中使用数组。该数组的类型必须存在于您的模式中,因此您需要创建一个新的数据库类型 - 如果它尚不存在 - :
CREATE TYPE t_number IS TABLE OF NUMBER;
然后您可以将一个数字数组传递给您的过程并使用该数组,就像它只是具有TABLE函数的另一个数据库表一样:
CREATE OR REPLACE PROCEDURE ConvertNo (p_numbers IN t_number) IS
CURSOR get IS
SELECT *
FROM tab
WHERE xx IN (SELECT column_value FROM TABLE(p_numbers));
...
BEGIN
...
END;
你可以这样称呼这个程序:
DECLARE
v_numbers t_number := t_number(2,3,5,6);
BEGIN
ConvertNo(v_numbers);
...
END;
或者,您可以使用预定义类型sys.odciNumberList
,而不是创建新类型。