我有这样的程序:
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
答案 0 :(得分:10)
问题在于您尝试将var1作为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);
...
类似的东西