从数组的元素插入而不使用for循环

时间:2014-04-18 10:06:09

标签: oracle bulkinsert

我有以下自定义类型:

CREATE OR REPLACE TYPE INJURED_PERSON
AS
  OBJECT
  (
    PIN VARCHAR2(7),
    FNAME VARCHAR2(20),
    LNAME VARCHAR2(20),
    PATRONYMIMC VARCHAR2(20),
    POSITIONID NUMBER(8,0),
    REPORTID NUMBER(10,0),
    OUTCOME NUMBER(1,0) );

另一种自定义类型,用作上述类型的表:

CREATE OR REPLACE TYPE INJURED_PEOPLE 
       AS TABLE OF INJURED_PERSON;

另一方面,我有一个存储过程只接受一个I​​NJURED_PEOPLE类型的参数。在程序中我想在Input参数中获取INJURED_PERSON并将它们插入到表中。我知道我可以遍历数组(我的输入参数)并逐个插入。但我想做这样的事情:

INSATE INTO MY_TAB SELECT something FROM MyInputParam.Pin

这可能在Oracle中实现吗?

1 个答案:

答案 0 :(得分:1)

可能你正在寻找一些东西(谷歌“Oracle桌面功能”):

SQL> create table my_tab(pin VARCHAR2(7))
  2  /


SQL> declare
  2   arr INJURED_PEOPLE := INJURED_PEOPLE();
  3  begin
  4   arr.extend(2);
  5   arr(1) :=  INJURED_PERSON('APIN',null,null,null,null,null,null);
  6   arr(2) :=  INJURED_PERSON('BPIN',null,null,null,null,null,null);
  7   INSERT INTO my_tab SELECT x.PIN FROM table(arr) x;
  8  end;
  9  /

SQL> select * from my_tab;

PIN                                                                             
-------                                                                         
APIN                                                                            
BPIN