这么长,不结合数据库pl/sql执行,肉眼找错误,何难。有一点建议
V_SQL VARCHAR2(4000);
V_WRH VARCHAR2(4000);
V_SOR VARCHAR2(4000);
V_OTH VARCHAR2(4000);你把上面的几个变量都定义成4000,存储过程最后你又把这个几个拼接在一起赋值给V_SQL,超过4000了肿么办呢?VARCHAR2作为变量使用的时候,支持的长度是32767个字符,你把V_SQL定义成VARCHAR2(32767)好了。
V_SQL VARCHAR2(4000);
V_WRH VARCHAR2(4000);
V_SOR VARCHAR2(4000);
V_OTH VARCHAR2(4000);你把上面的几个变量都定义成4000,存储过程最后你又把这个几个拼接在一起赋值给V_SQL,超过4000了肿么办呢?VARCHAR2作为变量使用的时候,支持的长度是32767个字符,你把V_SQL定义成VARCHAR2(32767)好了。
V_SQL := 'INSERT INTO HD_REPORT.HDTMP_DXD_PHMX
(NUM,CLS,FILDATE,GDCODE,STCODE)
SELECT DISTINCT 1,V_CKSEQ,TRUNC(SYSDATE),nvl(GOODS.CODE,''-''),D.CODE
FROM BUSINVS A,WAREHOUSE WAREHOUSE,SORTNAME SORTNAME,STORE D,GOODS GOODS
WHERE A.GDGID=GOODS.GID AND A.WRH=WAREHOUSE.GID AND A.STORE=D.GID AND GOODS.SORT=SORTNAME.SCODE'
||' AND ('||V_WRH||
') AND ('||V_SOR||
') AND ('||V_OTH||
')AND (D.GID='||V_STORE||')';
EXECUTE IMMEDIATE V_SQL;
PS:楼主这种动态SQL要注意把拼装的SQL输出出来手动执行,查错。