oracle存储过程 - 局部变量神秘地表现

时间:2012-12-08 08:11:14

标签: 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
        dbms_output.put_line('yuhj');
    end;
    end if;

第二个输出没有打印! 第一个输出打印为'1.tuser',这是我所期待的。

1 个答案:

答案 0 :(得分:1)

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

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

  

Oracle数据库当前处理长度为的字符值   零为空。但是,将来这可能不会继续存在   发布,Oracle建议您不要处理空字符串   和nulls一样。

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

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

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