如何将多个值传递给plsql中的过程

时间:2015-11-17 11:26:01

标签: sql plsql

我想在一个过程中执行此查询:

PROCEDURE ConvertNo ()
IS
CURSOR get IS
select *
from tab
where xx in (2,3,5,6);
..
..

我应该如何将这些2,3,5,6值传递给程序?

1 个答案:

答案 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,而不是创建新类型。