Sql oracle存储过程-局部变量行为神秘

Sql oracle存储过程-局部变量行为神秘,sql,oracle,Sql,Oracle,这就是我处理局部变量的方式: 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

这就是我处理局部变量的方式:

   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;
dbms_输出.put_行(团队_计数器| |'.| |用户名);
如果团队计数器<30且用户名为“”,则
开始
dbms_output.put_行('yuhj');
结束;
如果结束;
第二个输出未被打印!
第一个输出被打印为我所期望的“1.tuser”

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

Oracle假定长度为0的字符串等效于NULL,并且不会计算不使用NULL特定条件的比较:

Oracle数据库当前处理长度为的字符值 零为空。然而,这在未来可能不会继续发生 并且Oracle建议您不要处理空字符串 与空值相同

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

if team_counter < 30 and username is not null then
   ...
如果团队计数器<30且用户名不为空,则
...
作为补充说明,不需要
开始。。。在
dbms\u输出的周围结束
。放置\u行
。由于您没有捕获任何与此调用明确相关的异常或声明其他变量等,因此没有真正的需要