Oracle SQL插入多行并返回一些东西
Posted
技术标签:
【中文标题】Oracle SQL插入多行并返回一些东西【英文标题】:Oracle SQL inserting multiple rows and returning something 【发布时间】:2011-04-28 06:06:01 【问题描述】:在 Oracle 中,可以通过像这样的查询来插入多行
INSERT ALL
INTO mytable (column1, column2, column3) VALUES ('val1.1', 'val1.2', 'val1.3')
INTO mytable (column1, column2, column3) VALUES ('val2.1', 'val2.2', 'val2.3')
INTO mytable (column1, column2, column3) VALUES ('val3.1', 'val3.2', 'val3.3')
SELECT * FROM dual;
并使用准备好的语句,像这样进行一次插入
BEGIN INSERT
INTO mytable (column1, column2, column3) VALUES (null, 'val1.2', 'val1.3')
RETURNING column1 INTO ?; END;
将导致返回column1
的值(假设在插入之前有一个触发器为其分配了一个值)。
如果可能的话,有没有办法将两者结合起来?意思是,插入多个值,同时仍然通过单个查询返回所有 column1
值(结果集)?
【问题讨论】:
从 10gR2 开始,INSERT 不支持 BULK COLLECT INTO 合成器(例如 here)。我没有使用更新版本的 Oracle 对其进行测试。 【参考方案1】:从documentation开始(至少通过21c版本),returning子句的限制之一:
您不能指定 多表的返回子句 插入。
【讨论】:
也许,但应该有办法执行一个块并返回所有单个插入的结果集 如果您需要单独返回每个插入语句的值,为什么不单独运行它们呢? 我试图避免为每一行创建一个新查询(和对数据库的请求)并使用一些批处理命令......我想一个解决方案是锁定表,将每一行插入block 语句,然后发送查询以获取新生成的键(最后 n 插入的行)并最终解锁表。这听起来对吗? 选择您的答案作为已接受以关闭此问题。谢谢! 多次插入查询很慢,我同意 Yanick 的观点以上是关于Oracle SQL插入多行并返回一些东西的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 SQL 或 PLSQL 将多行数据插入 Oracle 中的表中?