日期:2014-05-17  浏览次数:21173 次

plsql 中关于不等于号的问题
今天遇到一个这样的问题。V_SYSTEM_CORD VARCHAR2(320)我首先定义了一个这样的变量。
  V_SYSTEM_CORD := '';
  IF recFSQLZAIKO.STOCK_PLANT_CD = 'HK' THEN
  IF recFSQLZAIKO.COMPANY_CD = 'FS' THEN
  V_SYSTEM_CORD := 'S';
  END IF;
  END IF;
  IF V_SYSTEM_CORD <> 'S' THEN
  V_SYSTEM_CORD := 'Q';
  END IF;
注:recFSQLZAIKO为cursor。

出现的问题是,变量V_SYSTEM_CORD <> 'S' 不起作用怎么也是false。
不知道我哪写错了,请大家帮看一下

------解决方案--------------------
在PL/SQL中单步跟踪一下,就知道了
------解决方案--------------------
SQL code
declare 
V_SYSTEM_CORD VARCHAR2(320);
begin 
V_SYSTEM_CORD:='S';
IF V_SYSTEM_CORD <> 'S' THEN
  V_SYSTEM_CORD := 'Q';
  END IF;
  dbms_output.put_line(V_SYSTEM_CORD);
end;

------解决方案--------------------
输出来看看
exec DBMS_OUTPUT.PUT_LINE (V_SYSTEM_CORD);
------解决方案--------------------
IF V_SYSTEM_CORD <> 'S' THEN
改成 IF V_SYSTEM_CORD is null THEN
这里你的变量不为'S'的时候是空值,不能用不等号来比较
------解决方案--------------------
遇到过类似问题, V_SYSTEM_CORD := ''; 实际值是null
最后像4#那样解决的

------解决方案--------------------
探讨
IF V_SYSTEM_CORD <> 'S' THEN
改成 IF V_SYSTEM_CORD is null THEN
这里你的变量不为'S'的时候是空值,不能用不等号来比较

------解决方案--------------------


declare
V_SYSTEM_CORD varchar2(30) := '';
begin

IF V_SYSTEM_CORD <> 'S' THEN
V_SYSTEM_CORD := 'Q';
dbms_output.put_line(v_system_cord);
END IF;
  
end;

oracle中,''就是为null;

demo:
drop table tt;
create table tt(id int) ;
insert into tt select '' from dual;
insert into tt select 1 from dual;
commit;
select * from tt
where id is null;