1

Oracle の PL/SQL 関数のデフォルト値について簡単な質問があります。このプログラムを例に取ります。

create or replace
FUNCTION testFunction
(
  varNumber IN NUMBER DEFAULT 0
)
RETURN NUMBER
AS
BEGIN
  dbms_output.put_line(varNumber);
  RETURN varNumber;
END;

ここでの考え方は、この関数が呼び出されたときに varNumber に値が指定されていない場合、値 0 を取るということです。

さて、私の問題は、値を持たないパラメーターの値として常に NULL を渡す Web サービスレイヤーから関数が呼び出されることです。Oracle は NULL を値として解釈するため、varNumber をデフォルトの 0 に初期化しません。

このアプローチが理にかなっている理由はわかりますが、この動作をオーバーライドし、NULL 値が渡された場合に、Oracle が明示的な DEFAULT 値を割り当て、関数ヘッダー?

手動チェックを行うオプションを検討しました...

IF(varNumber IS NULL) THEN
   varNumber := 0;
END IF;

ただし、これが問題になる可能性のある関数は何百もありますが、関数ごとのパラメーターの数が多いことは気にしないでください。そのため、問題に対するより一般的な解決策を見つけることができれば幸いです。

あなたが与えることができる洞察に乾杯.

4

3 に答える 3

4

NVL を使用して値を定義します。

NVL( value_in, replace_with )
于 2008-11-13T13:52:47.523 に答える
2

IN パラメーターに値を割り当てることはできませんが、IN/OUT にしてから設定することはできます。ただし、これは誤用と混乱の大きな可能性をもたらします。

したがって、ローカル変数を使用したほうがよいと思います。しかし、あなたは宣言でそれを行うことができます。あれは、

create or replace
FUNCTION testFunction
(
  varNumber IN NUMBER DEFAULT 0
)
RETURN NUMBER
AS
  vFix number := nvl(varNumber,0);
BEGIN
  dbms_output.put_line(vFix);
  RETURN vFix;
END;
于 2008-11-13T14:50:31.087 に答える
1

手動チェックは、あなたが望むことを安全に行うための唯一の方法です。

ただし、次のように 1 行で記述できます。

varNumber = NVL(varNumber,0);

幸運を!

于 2008-11-13T13:54:22.993 に答える