在早期的DBD Oracle (1.18)以前, Array DML的接口是假的, 其实是一条一条地执行的, 而DBD Oracle的主要编写人员也受到了很多开发人员的质问. 在DBD-Oracle v1.19的更改列表中, 我看到了下面的几行:

=head1 Changes in DBD-Oracle 1.18 (svn rev 6697)

  Added support for native Oracle Array interface thanks Kristian Nielsen
  Added suppot for LOB Locators from Jeffrey Klein.
  Updated README.win32.txt for Oracle 10xe and new Visual C++ version
  Updated README.lunix.txt for work-araound for UTF8 bug
  Fixed a number of compile warings  

    于是我在本机上验证了一把, 我们只要用SQL_TRACE去看一下执行次数就可以了, 如果是真正的Array DML, 那执行数次应当是1次, 否则应当是很多次. 在这儿我的数组的长度是10, 执行的输出结果如下:

Return: 10
Status: -1 -1 -1 -1 -1 -1 -1 -1 -1 -1

    从下面的SQL_TRACE的结果(用tkprof格式化过)来看, 本机的DBD-Oracle v1.19已经的确支持真正的Array DML了.

INSERT INTO T_PERLARRAY
VALUES
(:p1, :p2)

call     count  ...      query    current        rows
------- ------  ... ---------- ----------  ----------
Parse        1  ...          0          0           0
Execute      1  ...          1         21          10
Fetch        0  ...          0          0           0
------- ------  ... ---------- ----------  ----------
total        2  ...          1         21          10

    如果你想用Perl来高效地编写数据装载程序, 就请升级DBD-Oracle吧.