【问题标题】:Oracle Stored Procedure with variable number of IN parameters of the same type具有可变数量的相同类型的 IN 参数的 Oracle 存储过程
【发布时间】:2013-12-06 18:47:07
【问题描述】:

我有一个如下所示的存储过程:

create or replace 
PROCEDURE QueryMultipleValues
(
  VALUE_X1 IN VARCHAR2  
, VALUE_X2 IN VARCHAR2  
) AS
Cursor cur1 is
Select Table1.Value, Table2.OtherValue
From Table1
Join Table2 on Table1.OtherValue = Table2.OtherValue
Where Table2.OtherValue = VALUE_X1 or Table2.OtherValue = VALUE_X2
BEGIN
--display the results
END QueryMultipleValues;

我知道该代码中的名称含糊不清,因此如果有帮助,假设我正在尝试根据用作参数的 ID 号获取名称列表。现在存储过程需要两个,并且正好是两个输入参数。是否可以调整此代码以使其采用可变数量的输入参数?例如,“执行 QueryMultipleValues(123, 456, 789, 999)”还是“执行 QueryMultipleValues(123)”?我想我可以将 WHERE 子句更改为使用 IN 而不是 = ,但我无法弄清楚如何让该过程接受可变数量的 IN 参数。我真的很感激一些帮助。谢谢!

【问题讨论】:

标签: sql oracle stored-procedures


【解决方案1】:

如果你想传入一个参数列表,你应该真正使用一个集合而不是传入多个参数。

CREATE TYPE id_arr 
    AS TABLE OF VARCHAR2(100);

create or replace PROCEDURE QueryMultipleValues (
  p_ids IN id_arr
)

如果您希望您的过程接受可变数量的参数,假设您可以提前确定要接受的最大参数数量,您可以定义带有可选参数的过程

create or replace PROCEDURE QueryMultipleValues (
  p_id1 IN VARCHAR2,
  p_id2 IN VARCHAR2 = null,
  p_id3 IN VARCHAR2 = null,
  ..
  p_idN IN VARCHAR2 = null,
)

可以使用 1 到 N 个参数调用。

【讨论】:

  • 谢谢!可选参数解决方案可以解决问题,这正是我想要的。
猜你喜欢
  • 2010-11-02
  • 1970-01-01
  • 2010-09-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多