ORACLE PL/SQL 使用单个插入语句插入多个对象

ORACLE PL/SQL Multiple objects insert using a single insert Statement

假设我有这样的东西

CREATE OR REPLACE TYPE t_A AS OBJECT (
  var_n            number,       
  var_v            varchar2(12),
  CONSTRUCTOR FUNCTION t_A(SELF IN OUT NOCOPY t_A) RETURN SELF AS RESULT
);


CREATE OR REPLACE TYPE BODY t_A AS
CONSTRUCTOR FUNCTION t_A(SELF IN OUT NOCOPY t_A) RETURN SELF AS RESULT IS
    BEGIN
        SELF.var_n    := NULL; 
        SELF.var    := NULL;
    RETURN;
    END;
END;



    FOR RECORD IN cursor_x
    LOOP
    
    --> Some logic
    --result is t_A object
    insert_t_A(var_t_A);
    END LOOP;
    commit;

是否有可能以某种方式存储所有创建的 t_A 对象并立即将其插入循环之后?在单个插入语句中? Insted of single inserts ?

如果我没有正确理解你的问题,这里是如何做到的(虽然你的类型主体有错误,在我的例子中,它不需要,因为我根本不使用构造函数,所以它可以是从类型中删除):

CREATE OR REPLACE TYPE t_A AS OBJECT (
  var_n            number,       
  var_v            varchar2(12),
  CONSTRUCTOR FUNCTION t_A(SELF IN OUT NOCOPY t_A) RETURN SELF AS RESULT
);
/

CREATE OR REPLACE TYPE BODY t_A AS
CONSTRUCTOR FUNCTION t_A(SELF IN OUT NOCOPY t_A) RETURN SELF AS RESULT IS
    BEGIN
        SELF.var_n    := NULL; 
        SELF.var_v    := NULL;
    RETURN;
    END;
END;
/

create table t_a_table (ocol t_a);

declare
type t_aob  is table of t_a index by binary_integer;
tob t_aob;
i   pls_integer:=1;
begin
    for p in (select rownum rn from dual connect by level<11) loop
        tob(i):=t_a(p.rn, p.rn||' str');
        i:=i+1;
    end loop;
    
    forall i in 1..tob.count 
        insert into t_a_table values (tob(i));
end;
/