检查plsql中变量是否为空

发布于 2024-08-16 15:25:51 字数 184 浏览 7 评论 0原文

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

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

但我收到错误。如何检查变量是否为空?

我正在使用 oracle 数据类型

I want to check if a variable is null. If it is null, then I want to set a value to that variable:

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

But I am geting error in it. How can I check if a variable is null?

I am using oracle data type

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(8

北城孤痞 2024-08-23 15:25:51
if var is NULL then
  var :=5;
end if;
if var is NULL then
  var :=5;
end if;
遗忘曾经 2024-08-23 15:25:51

使用:

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

Oracle 9i+:

var := COALESCE(Var, 5)

其他替代方案:

var := NVL(var, 5)

参考:

Use:

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

Oracle 9i+:

var := COALESCE(Var, 5)

Other alternatives:

var := NVL(var, 5)

Reference:

多彩岁月 2024-08-23 15:25:51

在 PL/SQL 中,不能使用“=”或“<>”等运算符测试 NULL,因为与 NULL 的所有比较都会返回 NULL。要将某些内容与 NULL 进行比较,您需要使用特殊运算符 IS NULLIS NOT NULL,它们正是用于此目的。 而不是编写

IF var = NULL THEN...

因此,您应该编写

IF VAR IS NULL THEN...

In the case you’ve made you also have the option of using the 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。

  2. NVL 相比,COALESCE 仅在必须时评估参数,而 NVL 评估其两个参数,然后确定第一个参数是否一个是 NULL,等等。所以 COALESCE 可以更有效,因为它不会花时间评估不会使用的东西(并且可能会导致不需要的副作用),但这也意味着COALESCE 并不是 NVL 的 100% 直接替代品。

In PL/SQL you can't use operators such as '=' or '<>' to test for NULL because all comparisons to NULL return NULL. To compare something against NULL you need to use the special operators IS NULL or IS NOT NULL which are there for precisely this purpose. Thus, instead of writing

IF var = NULL THEN...

you should write

IF VAR IS NULL THEN...

In the case you've given you also have the option of using the NVL built-in function. NVL takes two arguments, the first being a variable and the second being a value (constant or computed). NVL looks at its first argument and, if it finds that the first argument is NULL, returns the second argument. If the first argument to NVL is not NULL, the first argument is returned. So you could rewrite

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

as

var := NVL(var, 5);

I hope this helps.

EDIT

And because it's nearly ten years since I wrote this answer, let's celebrate by expanding it just a bit.

The COALESCE function is the ANSI equivalent of Oracle's NVL. It differs from NVL in a couple of IMO good ways:

  1. It takes any number of arguments, and returns the first one which is not NULL. If all the arguments passed to COALESCE are NULL, it returns NULL.

  2. In contrast to NVL, COALESCE only evaluates arguments if it must, while NVL evaluates both of its arguments and then determines if the first one is NULL, etc. So COALESCE can be more efficient, because it doesn't spend time evaluating things which won't be used (and which can potentially cause unwanted side effects), but it also means that COALESCE is not a 100% straightforward drop-in replacement for NVL.

や三分注定 2024-08-23 15:25:51

使用 IS NULL

参考页面

Use IS NULL

reference page

长伴 2024-08-23 15:25:51

如果 var 为空则使用

use if var is null

仅此而已 2024-08-23 15:25:51

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

例如,

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

Never 不会进入 if 子句。

这些会起作用的。

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

Always remember to be careful with nulls in pl/sql conditional clauses as null is never greater, smaller, equal or unequal to anything. Best way to avoid them is to use nvl.

For example

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

Never goes inside the if clause.

These would work.

if 1<>nvl(i,1) then
if i<> 1 or i is null then
难理解 2024-08-23 15:25:51

另一种方式:

var := coalesce (var, 5);

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

Another way:

var := coalesce (var, 5);

COALESCE is the ANSI equivalent (more or less) of Oracle's NVL function.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文