检查plsql中的变量是否为空

检查plsql中的变量是否为空,sql,oracle,plsql,Sql,Oracle,Plsql,我想检查变量是否为null。如果为空,则我要为该变量设置一个值: //data type of var is number if Var = null then var :=5; endif 但我发现其中有错误。如何检查变量是否为空 我正在使用oracle数据类型使用为空 如果var为空,则使用使用: IF Var IS NULL THEN var := 5; END IF; Oracle 9i+: var = COALESCE(Var, 5) 其他备选方案: var = NV

我想检查变量是否为null。如果为空,则我要为该变量设置一个值:

//data type of var is  number 
if Var = null then
  var :=5;
endif
但我发现其中有错误。如何检查变量是否为空

我正在使用oracle数据类型

使用为空


如果var为空,则使用

使用:

IF Var IS NULL THEN
  var := 5;
END IF;
Oracle 9i+:

var = COALESCE(Var, 5)
其他备选方案:

var = NVL(var, 5)
参考:


    • 还有NVL功能


      请始终记住在pl/sql条件子句中小心使用null,因为null永远不会大于、小于、等于或不等于任何值。避免它们的最好方法是使用nvl

      比如说

      declare
        i integer;
      begin
        if i <> 1 then
          i:=1;
          foobar();
        end if;
      end;
      /
      
      声明
      i整数;
      开始
      如果我是1那么
      i:=1;
      foobar();
      如果结束;
      结束;
      /
      
      从不进入if子句

      这些方法会奏效

      if 1<>nvl(i,1) then
      if i<> 1 or i is null then
      
      如果1nvl(i,1)那么
      如果i 1或i为null,则
      
      另一种方式:

      var := coalesce (var, 5);
      

      COALESCE是Oracle的NVL函数的ANSI等价物(或多或少)。

      在PL/SQL中,您不能使用诸如“=”或“”之类的运算符来测试
      NULL
      ,因为与
      NULL
      的所有比较都返回
      NULL
      。要将某项内容与
      NULL
      进行比较,您需要使用特殊运算符
      IS NULL
      IS NOT NULL
      ,这些运算符正是用于此目的。因此,与其写作

      IF var = NULL THEN...
      
      你应该写

      IF VAR IS NULL THEN...
      
      在您提供的情况下,您还可以选择使用
      NVL
      内置功能
      NVL
      接受两个参数,第一个是变量,第二个是值(常量或计算值)
      NVL
      查看其第一个参数,如果发现第一个参数为
      NULL
      ,则返回第二个参数。如果
      NVL
      的第一个参数不是
      NULL
      ,则返回第一个参数。所以你可以重写

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

      我希望这有帮助

      编辑 因为我写这个答案已经快十年了,让我们通过稍微扩展一下来庆祝一下

      COALESCE
      函数是与Oracle的
      NVL
      相当的ANSI函数。它在以下几个方面与NVL有所不同:

    • 它接受任意数量的参数,并返回第一个非空参数。如果传递给
      COALESCE
      的所有参数都为NULL,则返回NULL

    • NVL
      相反,
      COALESCE
      只在必须时计算参数,而
      NVL
      计算两个参数,然后确定第一个参数是否为NULL,等等。因此
      COALESCE
      可以更有效,因为它不会花时间计算不使用的东西(这可能会导致不必要的副作用),但这也意味着,
      COALESCE
      并不能100%直接替代
      NVL


    • 我等了5年才告诉你这个,但是谢谢你的回答。
      IF var IS NULL THEN
        var := 5;
      END IF;
      
      var := NVL(var, 5);