使用FOR-ALL更新

时间:2013-04-04 21:08:46

标签: plsql oracle11g procedure

我有一段代码

TYPE t_dc IS TABLE OF TEMP_DC%ROWTYPE INDEX BY PLS_INTEGER;
o_u_dc t_dc;
n_index_update_dc BINARY_INTEGER := 0;

然后在脚本的末尾我有

            IF n_index_update_dc > 0
            THEN
                FORALL dc IN o_u_dc.first..o_u_dc.last SAVE EXCEPTIONS
                    UPDATE TEMP_DC
                    SET COL1 = o_u_dc(n_index_update_dc).col1
                    WHERE COLPK = o_u_dc(n_index_update_dc).COLPK;
            END IF;
            COMMIT;

我收到错误116 7 PLS-00435: DML statement without BULK In-BIND cannot be used inside FORALL

我尝试在线查看oracle文档,但我无法理解我所缺少的内容。任何帮助?

1 个答案:

答案 0 :(得分:1)

我不知道你从哪里得到n_index_update_dc,但你应该使用的代码是:

            IF n_index_update_dc > 0 THEN
                FORALL dc IN o_u_dc.first..o_u_dc.last SAVE EXCEPTIONS
                    UPDATE TEMP_DC
                    SET COL1 = o_u_dc(dc).col1
                    WHERE COLPK = o_u_dc(dc).COLPK;
            END IF;
            COMMIT;

这还取决于你填写o_u_dc的方式。也许这不是你想要达到的目标。