PLSQL:修改过程的IN参数

时间:2011-07-06 13:36:53

标签: plsql

我有这样的程序:

Procedure(var1 IN VARCHAR2, var2 IN VARCHAR2 ... )
---lines of code---

---在这个程序里面我想做下面的

var1 := filter(var1); -- filter & assign to the same variable
....
....
--do something with var1

但问题是无法将IN参数修改为过程作为常量。 我能想到的唯一选择是创建/声明一个新的局部变量&为其分配修改后的IN参数&在后续代码中使用它。 但这导致了笨拙的代码,因为有近30个IN参数。所以我需要为每个参数创建30个新变量。

需要您的帮助来更改plsql过程中的IN参数或上述问题的任何其他解决方法。

此致 VJ

2 个答案:

答案 0 :(得分:10)

问题在于您尝试将var1作为OUT参数传递到过滤器函数中,这是不允许的。您拥有的唯一选择是:

  • 将其设为IN OUT参数
  • 将其分配给本地变量

答案 1 :(得分:3)

如果要修改var1,则必须将过程规范更改为:

Procedure(var1 IN OUT VARCHAR2 ...

但是,你说有近30个IN参数。如果数据是相关的,为什么不创建自定义记录类型?

-- use CREATE OR REPLACE if at the schema level
CREATE TYPE my_params_type IS RECORD(var1 type, var2 type ...);

然后你的程序......

Procedure(params IN my_params_type) IS
filtered_params my_params_type := params; 
BEGIN
  filterd_params.var1 := filter(params.var1);
  ... 

类似的东西