今天遇到一个这样的问题。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#那样解决的
------解决方案--------------------
------解决方案--------------------
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;