oracle 检查PLSQL中的变量是否为空

vhmi4jdf  于 2023-04-05  发布在  Oracle
关注(0)|答案(8)|浏览(198)

我想检查一个变量是否为null。如果它是null,那么我想给这个变量设置一个值:

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

但是我得到错误在它.我怎么能检查如果一个变量是空的?
我使用oracle数据类型

a0x5cqrl

a0x5cqrl1#

if var is NULL then
  var :=5;
end if;
wvt8vs2t

wvt8vs2t2#

用途:

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

Oracle 9i+:

var := COALESCE(Var, 5)

其他替代品:

var := NVL(var, 5)

参考文献:

b1payxdu

b1payxdu3#

在PL/SQL中,不能使用'='或'〈〉'等运算符来测试NULL,因为与NULL的所有比较都返回NULL。要与NULL进行比较,您需要使用专门用于此目的的特殊运算符IS NULLIS 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;

作为

var := NVL(var, 5);

希望这能帮上忙。

编辑

因为我写这个答案已经快十年了,让我们通过扩展它来庆祝一下。
COALESCE函数是Oracle的NVL的ANSI等效函数。它与NVL在IMO的几个好方面有所不同:
1.它接受任意数量的参数,并返回第一个不为NULL的参数。如果传递给COALESCE的所有参数都为NULL,则返回NULL。
1.与NVL相反,COALESCE只在必要时计算参数,而NVL计算两个参数,然后确定第一个参数是否为NULL等。因此COALESCE可以更高效,因为它不会花费时间计算不会使用的内容(这可能会导致不必要的副作用),但这也意味着COALESCE不是NVL的100%直接替代品。

izj3ouym

izj3ouym6#

如果var为null则使用

b09cbbtk

b09cbbtk7#

永远记住要小心pl/sql条件子句中的null,因为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
5rgfhyps

5rgfhyps8#

另一种方式:

var := coalesce (var, 5);

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

相关问题