鉴于您storedFunction
作为一个自治事务工作,并且您正在处理超过 1 亿行,您可能会遇到严重的性能问题。如果可能的话,我会重新考虑整个策略。报废它。重来。
选项1
如果这不可能,最好的办法是执行bulk collect
提取(有限制)以检索col1
和col2
,显式调用storedFunction
每一行的col2
,然后bulk insert
进入table1
。这应该有望最大限度地减少读取table2
和写入table1
. 不过,你真的会在打电话时付钱给吹笛者storedFunction
。
选项 2
将您的函数包装在另一个具有您想要的行为的函数中。你没有提到类型,但我假设 VARCHAR2。当然,您可以根据需要进行调整。请原谅语法错误,因为我手边没有 Oracle 数据库。
CREATE FUNCTION MYFUNC(col1 IN VARCHAR2, col2 IN VARCHAR2) RETURN VARCHAR2
AS
v_dummy VARCHAR2(100);
BEGIN
v_dummy := storedFunction(col2); --Call stored function
return col1; --return col 1 unchanged
END;
然后您可以按如下方式进行插入:
INSERT INTO table1 (col1)
SELECT MYFUNC(A.col1, A.col2)
FROM table2 A;