2016-01-21 80 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語句的處理方式。