forall批处理求教!

[复制链接]
查看11 | 回复4 | 2007-10-20 08:38:44 | 显示全部楼层 |阅读模式
在forall批处理中,是不是只能跟随一条DML语句,如果是一个SQL快,怎么处理?
如:
forall i in dbusr.first..dbuser.last
if(upper(dbuser(i))!='GFMIS') then

sql_seq_nextval:='select '||dbuser(i)||seqval||' from dual';

execute immediate sql_seq_nextval into id;
--插入各区县

execute immediate 'insert into '||dbuser(i)||tablename||' values (:id,:TYPENO,:NAME,:SHEET,:ROWCOUNT,

ESCR,:QUANTITY,:SPECIAL,:STATUS,:AMOUNT,:EXPIREYEAR,:LENOFSEQ,:HASCHECKCODE,:HASYEARCODE,:ISTAXRECEIPT,:HASTYPECODE,:YEARCODE,:TEMPLATEID,:LENOFPREFIX,:MONEYDIGITS,:RECEIPTKIND,:PROCTM )'

using id,TYPENO,TYPENAME,SHEET,TYPEROWCOUNT,DESCR,QUANTITY,SPECIAL,STATUS,AMOUNT,EXPIREYEAR,LENOFSEQ,HASCHECKCODE,HASYEARCODE,ISTAXRECEIPT,HASTYPECODE,YEARCODE,TEMPLATEID,LENOFPREFIX,MONEYDIGITS,RECEIPTKIND,PROCTM;
end if;
这段怎么处理?
回复

使用道具 举报

千问 | 2007-10-20 08:38:44 | 显示全部楼层
用begin end框起来
回复

使用道具 举报

千问 | 2007-10-20 08:38:44 | 显示全部楼层
不行啊!
回复

使用道具 举报

千问 | 2007-10-20 08:38:44 | 显示全部楼层
你这样用根本从思路上就是错的
如果要像你这样写,还是去掉forall 吧,就用for i in 。。。loop循环就不会出错了
首先,forall后面好像是只能跟一条dml语句的,当然,这点我也不是很确定,反正我用是只跟一条dml 语句
其次,forall后面是否能跟动态sql我也不确定,可以去验证一下
还有,forall后面的变量都应该是table类型的,并且带的下标就是forall的循环下标i ,而你使用的变量大部分都不是table类型变量,说明你还没有理解forall 的含义,建议去oracle文档找找看
最后,我的理解,forall其实并不是循环的含义,而是批量绑定的含义,不要当循环来用。
回复

使用道具 举报

千问 | 2007-10-20 08:38:44 | 显示全部楼层
最后,我的理解,forall其实并不是循环的含义,而是批量绑定的含义,不要当循环来用。
昨天看的文档就是这么说的
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行