检查plsql中的变量是否为空
我想检查变量是否为null。如果为空,则我要为该变量设置一个值:检查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
//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,则返回NULLNVL
相反,COALESCE
只在必须时计算参数,而NVL
计算两个参数,然后确定第一个参数是否为NULL,等等。因此COALESCE
可以更有效,因为它不会花时间计算不使用的东西(这可能会导致不必要的副作用),但这也意味着,COALESCE
并不能100%直接替代NVL
我等了5年才告诉你这个,但是谢谢你的回答。
IF var IS NULL THEN
var := 5;
END IF;
var := NVL(var, 5);