2011-07-06 45 views
4

我的程序是這樣的: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

回答

9

的問題是,你試圖通過VAR1作爲OUT PARAM到您的過濾功能,這是不允許的。你唯一的選擇是:

  • 使它成爲一個IN OUT參數
  • 將其分配到一個局部變量
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); 
    ... 

類似的東西