web-dev-qa-db-ja.com

plsqlで変数がnullかどうかを確認します

変数がnullかどうかを確認したい。 nullの場合、その変数に値を設定します。

//data type of var is  number 
if Var = null then
  var :=5;
endif

しかし、エラーが発生しています。変数がnullかどうかを確認するにはどうすればよいですか?

Oracleデータ型を使用しています

27
user223541
if var is NULL then
  var :=5;
end if;
53
Priyank

つかいます:

IF Var IS NULL THEN
  var := 5;
ENDIF;

Oracle 9i +:

var = COALESCE(Var, 5)

他の選択肢:

var = NVL(var, 5)

参照:

18
OMG Ponies

PL/SQLでは、NULLとのすべての比較がNULLを返すため、 '='や '<>'などの演算子を使用してNULLをテストすることはできません。何かをNULLと比較するには、まさにこの目的のためにある特別な演算子IS NULLまたはIS NOT NULLを使用する必要があります。したがって、書く代わりに

IF var = NULL THEN...

あなたは書くべきです

IF VAR IS NULL THEN...

指定した場合、NVL組み込み関数を使用するオプションもあります。 NVLは2つの引数を取ります。1つ目は変数で、2つ目は値(定数または計算)です。 NVLは最初の引数を調べ、最初の引数がNULLであることがわかると、2番目の引数を返します。 NVLの最初の引数がNULLでない場合、最初の引数が返されます。だからあなたは書き直すことができます

IF var IS NULL THEN
  var := 5;
END IF;

として

var := NVL(var, 5);

これがお役に立てば幸いです。

13
Bob Jarvis
4
Arthur Thomas
3
Andy White

別の方法:

var := coalesce (var, 5);

COALESCEは、OracleのNVL関数のANSI相当(多かれ少なかれ)です。

2
Tony Andrews

NULLは決して大きく、小さく、等しく、等しくないため、pl/sql条件節ではNULLに注意する必要があります。それらを回避する最善の方法は、nvlを使用することです。

例えば

declare
  i integer;
begin
  if i <> 1 then
    i:=1;
    foobar();
  end if;
end;
/

If句の内側には決して入りません。

これらは機能します。

if 1<>nvl(i,1) then
if i<> 1 or i is null then
2
Calmar

varがnullの場合に使用

2
Dapeng