【问题标题】:How to Pass multiple values to a procedure in plsql如何将多个值传递给plsql中的过程
【发布时间】:2016-02-18 18:04:57
【问题描述】:

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

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

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

【问题讨论】:

标签: sql plsql


【解决方案1】:

您可以传递一个数字数组,然后在查询中使用该数组。为了能够在 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 而不是创建新类型。

【讨论】:

  • 还有一个预定义类型sys.odciNumberList,如果您愿意,可以使用。
  • 感谢@TonyAndrews!我不知道。我会把它包括在我的答案中
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-03
  • 1970-01-01
  • 1970-01-01
  • 2020-07-13
  • 2021-11-01
相关资源
最近更新 更多