加快oracle合并插入或更新速度

加快oracle合并插入或更新速度,oracle,plsql,Oracle,Plsql,我一个接一个地浏览一个列表,并根据一长串条件将该列表中的数据合并到另一个表中 合并在不匹配时执行插入,在匹配时执行更新。我发现这次合并花了很多时间 我花了10秒钟浏览了200条记录的列表,这似乎太多了。有没有办法让这个合并更快?多谢各位 stmt := 'MERGE INTO dash_'||domain_name||'_rag TARGETd USING (SELECT '||''''||ms||''''||' AS JNDI, '||''''||domain_name||''''||' AS

我一个接一个地浏览一个列表,并根据一长串条件将该列表中的数据合并到另一个表中

合并在不匹配时执行插入,在匹配时执行更新。我发现这次合并花了很多时间

我花了10秒钟浏览了200条记录的列表,这似乎太多了。有没有办法让这个合并更快?多谢各位

stmt := 'MERGE INTO dash_'||domain_name||'_rag TARGETd USING (SELECT '||''''||ms||''''||' AS JNDI, '||''''||domain_name||''''||' AS DOMAIN, ''Y'' AS TARGET, '||''''||jndi_type||''''||' AS JNDI_TYPE, '||''''||jndi_s||''''||' AS MS2_D1, '||''''||RAGr||''''||' AS MS2_D1R, '||'SYSDATE AS TS FROM DUAL) SOURCE ON (SOURCE.JNDI=TARGETd.JNDI) WHEN NOT MATCHED THEN INSERT (JNDI, DOMAIN, TARGET, JNDI_TYPE,MS2_D1, MS2_D1R, TS) VALUES(SOURCE.JNDI, SOURCE.DOMAIN, SOURCE.TARGET, SOURCE.JNDI_TYPE,SOURCE.MS2_D1, SOURCE.MS2_D1R, SOURCE.TS)WHEN MATCHED THEN UPDATE SET TARGETd.TARGET = SOURCE.TARGET, TARGETd.MS2_D1=SOURCE.MS2_D1, TARGETd.MS2_D1R=SOURCE.MS2_D1R, TARGETd.TS=SOURCE.TS';

      execute immediate stmt;

为什么每次都要连接变量值,如
ms
等,而不是使用绑定变量?为什么首先要使用过程代码(并一次“合并”一行)?如果可能的话,并且您还没有提供足够的信息来了解这一点,那么最好的优化就是用普通SQL重写所有内容,并在数据库中运行所有内容,而不必在SQL和PL/SQL之间来回切换上下文。@AlexPoole谢谢您的建议。我用绑定变量替换了连接,速度显著提高。我是新手程序员,没有意识到这种效果。干杯