在存储过程里,有如下代码
........................
l_productstr := '(' || chr(39) || '10000024' || chr(39) || ')';insert into t_test1
select * from t_productinfo where pi.productcode in l_productstr;
........................运行的时候,没有数据插入到表 t_test1中去;
但是如果改成:
..............................
select * from t_productinfo where pi.productcode in ('10000024');
..............................
就可以有数据插入到t_test1中去;到底是咋回事情呢?
在线等待。btw:
至于为啥要用l_productstr,因为我的存储过程里面用的是动态的,而且是多个组合的productcode。
........................
l_productstr := '(' || chr(39) || '10000024' || chr(39) || ')';insert into t_test1
select * from t_productinfo where pi.productcode in l_productstr;
........................运行的时候,没有数据插入到表 t_test1中去;
但是如果改成:
..............................
select * from t_productinfo where pi.productcode in ('10000024');
..............................
就可以有数据插入到t_test1中去;到底是咋回事情呢?
在线等待。btw:
至于为啥要用l_productstr,因为我的存储过程里面用的是动态的,而且是多个组合的productcode。
输出'a'
再加上一些代码吧,这样看起来更准确些。
.................
open c_favcycleproduct;
loop
fetch c_favcycleproduct
into l_productcode;
exit when c_favcycleproduct%notfound;
l_productstr := l_productstr || chr(39) || l_productcode || chr(39) || ',';
--l_productstr := l_productstr || l_productcode || ',';
end loop;
close c_favcycleproduct;
...................
insert into t_test1
select * from t_productinfo where pi.productcode in l_productstr;
...................
DECLARE
in_str VARCHAR2(4000);
v_ename VARCHAR2(30);
BEGIN
in_str := '(' || chr(39) || 'WARD' || chr(39) || ')';
EXECUTE IMMEDIATE 'select t.ename from emp t where t.ename in ' || in_str
INTO v_ename;
dbms_output.put_line(v_ename);
END;
/WARD
PL/SQL procedure successfully completed
SQL>
你拼完以后,可以打出来看一下你的SQL对不对
循环没问题,这个可以放心。我测试过的。
奇怪的地方在于循环后的结果,拿出来单独执行查询,是可以的。
但在存储过程里面执行就找不到结果。
所以我怀疑是单引号的问题。
open c_favcycleproduct;
loop
fetch c_favcycleproduct
into l_productcode;
exit when c_favcycleproduct%notfound;
l_productstr := l_productstr || ''''||l_productcode||'''' || ',';
--l_productstr := l_productstr || l_productcode || ',';
insert into t_subtype_pdt_fee
(id, subtype, productcode, price)
select rownum as num,
us.usertypeid,
l_productcode,
getSubTypeProductFee(us.usertypeid, l_productcode) bprice
from t_usertypes us;
end loop;
close c_favcycleproduct; l_tmpb := length(l_productstr);
l_productstr := substr(l_productstr, 0, l_tmpb - 1) || ')';