2017-09-02 111 views
0

Oracle有能力通过将数组作为绑定变量进行批量插入。然后,数据库不单独的行插入的阵列的每个成员:PostgreSQL是否具有Oracle ArrayBind的等效功能?

http://www.oracle.com/technetwork/issue-archive/2009/09-sep/o59odpnet-085168.html

因此,如果我有一个数组:

串[] ARR = {1,2,3}

而且我通过这是一个绑定到我的SQL:

INSERT INTO MY_TABLE(my_col)值(:ARR)

我结束了在表中3行。

有没有办法在PostgreSQL中做这个w/o修改SQL? (即我不想使用复制命令,明确的多行插入等)

+1

问题不在于插入数组,而是在单个语句中插入多行。 –

回答

0

不,你不能这样做,在PostgreSQL中。

您将不得不使用多行INSERTCOPY声明。

0

我不确定您定位的是哪种语言,但是在Java中,例如,这可以使用Connection.createArrayOf()

相关提问/回答: error setting java String[] to postgres prepared statement

+1

此链接似乎描述了将数组作为参数传递 - 而不是Oracle ArrayBind的等价物。 (即,您最终将得到一列中包含数组值的单行,而不是ArrayBind功能提供的多行扩展) –

1

最近,你可以使用方法是:

insert into my_table(my_col) SELECT unnest(:arr) 
1

PgJDBC支持COPY,这就是你的最佳选择。我知道这不是你想要的,并且令人沮丧的是你必须使用不同的行表示法,但这是关于你会得到的最好的。

这就是说,你会发现,如果你准备一个语句,然后addBatch和executeBatch,你会得到非常稳定的性能。充足,以至于通常不值得关注使用COPY。见Statement.executeBatch。您可以使用几行简单函数在其上创建“数组绑定”。它不如服务器端数组绑定,但它会做的很好。

相关问题