0

这就是我定义局部变量的方式:

   team_counter number (38) := 0;
   username varchar2(50) := '';

这就是我在使用一些 select into 语句后尝试使用/查看它们的值的方式:

    dbms_output.put_line(team_counter||'.'||username);
    if  team_counter< 30 AND username  <>'' then
    begin
        dbms_output.put_line('yuhj');
    end;
    end if;

第二个输出没有被打印!第一个输出被打印为我所期待的“1.tuser”。

4

1 回答 1

1

这是因为您正在尝试使用不等式运算符将字符串与长度为 0 的字符串进行比较。

Oracle 假定长度为 0 的字符串等同于 NULL,并且不会评估不使用 NULL 特定条件的比较。引用

Oracle 数据库当前将长度为零的字符值视为空值。但是,在未来的版本中,这可能不会继续存在,Oracle 建议您不要将空字符串视为与 null 相同。

简单地说,这意味着您的 IF 语句应该是:

if team_counter < 30 and username is not null then
   ...

作为附加说明,不需要begin ... end周围的dbms_output.put_line. 由于您没有捕获与此调用明确相关的任何异常或声明其他变量等,因此没有真正的需要。

于 2012-12-08T08:45:41.220 回答