我有一个存储过程,如下所示:
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参数。我真的很感激一些帮助。谢谢!
答案 0 :(得分:4)
如果要传入参数列表,则应该使用集合而不是传递多个参数。
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个参数调用。