【发布时间】:2012-07-17 14:18:43
【问题描述】:
我在 ORACLE 11g 上使用 SQL 插入到 table1 并同时触发插入到 table3 的存储函数。存储函数没有触发,我怀疑这是因为 ORACLE 优化器意识到插入 table1 不需要存储函数,所以它忽略了它们?
有没有办法请求oracle不优化查询或者有更好的解决方案。
示例代码:
INSERT INTO table1 (col1)
SELECT A.col1
FROM (SELECT col1, storedFunction(col2),storedFunction(col3),storedFunction(col4)
FROM table2) A
【问题讨论】:
-
您之前是否尝试将所有数据插入到临时表中?
-
您究竟想做什么?对一组记录多次调用一个过程或同时插入多个表?
-
danhip - 这是一种可能性,但我插入了 >1 亿行,所以我想(如果可能的话)在 1 个查询中完成
-
Adam - 添加到我的示例代码中。多次调用storedProcedure,每次插入table3
-
首先,我假设它实际上是一个存储函数,而不是存储过程,因为存储过程不能在 SQL 语句中调用。但是,插入另一个表的存储函数也不能从 SQL 语句中调用。这意味着您的存储函数是使用自治事务声明的,该事务引入了一堆皱纹,没有一个是好的。为插入到
table3中的每一行提交将非常昂贵。您存储的函数将无法查看会话中未提交的更改。这是怎么回事?
标签: sql oracle stored-procedures oracle11g