if(cc.grade='Z' and cc.grade_flag='N') then B:='_Z';此时,in (B)是什么样的啊?
这样 STR := 'SELECT * FROM TBNAME WHERE COLNAME IN ('||CHR(39)||B||CHR(39)||')'; EXECUTE IMMEDIATE STR;
我们老板是这么解决的 and substr(a.subinventory_code,5,1) in (select grade from ( select 'Z' grade,1 seq from dual union select 'P'grade ,2 seq from dual union select 'N' grade,3 seq from dual union select 'V' grade,4 seq from dual order by seq ) grade_list where seq <= (select seq from ( select 'Z' grade,1 seq from dual union select 'P'grade ,2 seq from dual union select 'N' grade,3 seq from dual union select 'V' grade,4 seq from dual ) where grade=cc.grade ) )
改成
B:=chr(39)||'_Z'||chr(39)||','||chr(39)||'_P'||chr(39)||','||chr(39)||'_N'||chr(39)||','||chr(39)||'_V'||chr(39);
可是还是不好用啊。
我用in('_Z','_P','_V','_N')就能查到资料但是用in (B)就查不到,为什么啊?难道是我还有其他的地方写错了吗?
B:='_Z';此时,in (B)是什么样的啊?
STR := 'SELECT * FROM TBNAME WHERE COLNAME IN ('||CHR(39)||B||CHR(39)||')';
EXECUTE IMMEDIATE STR;
and substr(a.subinventory_code,5,1) in
(select grade from
(
select 'Z' grade,1 seq from dual union
select 'P'grade ,2 seq from dual union
select 'N' grade,3 seq from dual union
select 'V' grade,4 seq from dual
order by seq
) grade_list
where seq <=
(select seq from
(
select 'Z' grade,1 seq from dual union
select 'P'grade ,2 seq from dual union
select 'N' grade,3 seq from dual union
select 'V' grade,4 seq from dual
)
where grade=cc.grade
)
)