来自错误的Oracle PL / SQL BULK更新

杰里米

是否可以像这样在Oracle中执行批量更新:

TYPE type_A IS RECORD
(
    var    NUMBER(15,2)
);

TYPE t_type_A IS VARRAY (9) OF type_A; 
var_t_type_A  t_type_A;


SELECT
    A
BULK COLLECT INTO var_t_type_A
FROM
    B;
    
-- lopp over

FOR i IN var_t_type_A.FIRST .. var_t_type_A.LAST
LOOP
    var_t_type_A.var = 99;
END LOOP;
    

而只是与插入类似

   FORALL var_i_idx IN 1..table_of_t_created_new_buchung.count SAVE EXCEPTIONS
       UPDATE TABLE B somehow
Belayer

好吧,您的基本代码相当稀疏,因此根据需要也可以是任何答案。首先,是的,您看到的想要的是可能的。其次,您的代码中有几个问题:

  1. 没有理由创建一个包含单个变量的记录。
  2. 假设一个varray将与批量收集/全部。我只是从未使用过,从未明白这一点。
  3. 您的forall语句包含“保存例外”子句,但是如果没有例外部分,这将毫无用处。我已经包括了必要的定义。
    declare 
        bulk_errors  EXCEPTION;  
        PRAGMA EXCEPTION_INIT (bulk_errors , -24381);  
        
        type t_type_a is table of number(15,2);  
        var_t_type_a  t_type_a;
    
    begin
    
    
        select a
          bulk collect 
          into var_t_type_a
          from b;
        
        -- lopp over
    
        for i in var_t_type_a.first .. var_t_type_a.last
        loop
            var_t_type_a(i) = 99;
        end loop;
        
        ...
    
    
        forall var_i_idx in 1..var_t_type_a.count save exceptions
           update table b 
              set some_column = var_t_type_a(var_i_indx); 
              
    exception
        when bulk_errors then 
             <logic for bulk errors>;
    end ;

要获得更完整的答案,请发布更完整的问题描述。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章