今天遇到一个这样的问题。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。
不知道我哪写错了,请大家帮看一下

解决方案 »

  1.   

    在PL/SQL中单步跟踪一下,就知道了
      

  2.   

    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;
    输出S,可见你的
    IF recFSQLZAIKO.STOCK_PLANT_CD = 'HK' THEN
      IF recFSQLZAIKO.COMPANY_CD = 'FS' THEN
      V_SYSTEM_CORD := 'S';
      END IF;
      END IF;
    没有对V_SYSTEM_CORD := 'S';赋值成功
      

  3.   

    输出来看看
    exec DBMS_OUTPUT.PUT_LINE (V_SYSTEM_CORD);
      

  4.   

    本帖最后由 wildwave 于 2010-04-12 17:38:23 编辑
      

  5.   

    wildwave说的对,对一个判断没有对变量赋值,在orcle中''<>''对吧?orcale中给变量赋'',其实就是给它赋null,请高手总结一下
      

  6.   

    遇到过类似问题, V_SYSTEM_CORD := ''; 实际值是null
    最后像4#那样解决的
      

  7.   


    null is not null
    4楼正解!
      

  8.   

    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;