日期:2014-05-17  浏览次数:21068 次

oracle 两层循环,exception 跳出到外层 请教
小弟今天在写plsql,遇到个问题:

问题简化,就是,我要导入两个文件到数据库,每个文件都有许多行,其中有一行有错,这个文件的所有行就不导入,直接到下个文件

fileName    row_num     data
A                   1                    a1
A                   2                    a2
A                   3                    a3
B                   1                    b1
B                   2                    b2
B                   3                    b3

把表1insert到相同机构的表2中,两层for loop 外层 loop filename,内层loop data,假如,fileA有一个data,有错误(例如a2)
就要rollback之前的inser(例如a1),不再进行接下来的insert(例如a3),直接到 fileB。

我直接根据思路,写的是

for file in
(select dinstinct filename form table)
loop
    begin
    
    for row in 
    (select data form table where filename=file.filename)
    loop
    insert xx to xx
    end loop
     
    commit;
    exception
    rollback;   --有错误 :ORA-01002:fetch out of sequence
    end;
     
end loop

反正,大概思路就是,出于某些原因,一定要两层循环,内层循环假如有错,全部rollback,本次大循环全都不算,也不再继续做,然后直接进入下一次大循环。

请教怎么写,谢谢
------解决方案--------------------
给你个思路吧,不用for in循环  用fetch into   然后  使用continue,很好实现的
------解决方案--------------------
这个简单,在内层循环每次开始位置加一个savepoint,每次循环结束位置加一个exception roll back to到你设置的savepoint就会继续往下执行,savepoint具体用法熟悉一下