2016-01-21 81 views
0

我正在使用Oracle的Node js驱动程序。我知道如何在SQL语句中绑定简单变量,但是如何绑定使用IN子句的变量?Oracle节点js - Javascript - SQL语句中IN子句的绑定变量

在下面的例子中,我的绑定变量是:grp_ids,我想将它绑定到一个字符串数组。但是代码不会产生预期的结果。

function test2() 
{ 
    oracledb.getConnection(connInfo, 
    function(err, connection) 
    { 
     if (err) {console.error(err.message); return; } 
     var grpIds = '(\'0021\', \'1684\')'; 
     console.log(grpIds); 
     connection.execute(` 
     SELECT ag.grp_id, ag.grp_nm from acct_group ag 
     WHERE ag.grp_id in :grp_ids`, 
     {grp_ids: grpIds}, 
     function(err, result) 
     { 
      if (err) {console.error(err.message); return; } 
      console.log(result.rows); 
     }); 
    }); 
} 

回答

0

这个有用的“在IN子句绑定多个值” P169不能直接绑定变量如你所指出的那样然而设置CURSOR_SHARING给力增大的程度SQL语句可以共享,并应减少所需的负载数量。

尝试执行:

ALTER session SET cursor_sharing=force 
在会话

运行查询之前。只要您的'IN CLAUSE'列表中的项目数量相同,则不需要后续的装载。

您可以跟踪的声明是承载和V $ SQL执行次数:

select sql_text, 
     loads, 
     executions 
from v$sql order by last_active_time desc ; 

This blog 是了解你实际上是在做什么改变光标共享水平时有所帮助。我建议确保您在执行进一步的sql之前立即将cursor_sharing设置回EXACT的默认值,然后再将FORCE保持为尽可能小的范围 - 它可以改变更复杂的SQL语句的处理方式。