2013-10-17 50 views
0

我已將我的web服務器node.js連接到Oracle,並且我已經從de數據庫中選擇了一些數據。從Node.js中讀取Oracle中的BLOB

當我選擇像string或int這樣的數據類型時沒有問題,但我也需要讀取一些BLOB(在我的數據庫中稱爲PARAMETERS)。

  • 第一個問題:存儲在數據庫中的BLOB的的大小是37000個字節,但尺寸最大緩衝區的是2000 - >解決方案:我只選擇第一2000個字節

  • 第二個問題:結果是一個數組,但我認爲它是空的或者我無法讀取裏面的數據 - >解決方案?

有誰知道如何用node.js-Oracle模塊讀取BLOB?

非常感謝!

db.connect({ "hostname": "xxx", "user":"xx", "password": "xx", "database": "xx"},  function(err, connection) { 
      if (err) { 
       return console.log("CONNECTION ERROR: " + err); 
      } 
      else{ 
       console.log('Connected to Oracle '); 
       connection.execute('SELECT utl_raw.cast_to_varchar2(dbms_lob.substr(PARAMETERS,2000,1)) FROM records WHERE records.id = 1', [], function (err, rows) { 
         if (err) { 
          console.log('error: ' + err); 
         } 
         console.log('Parameters= ' + rows); 
         socket.emit('response:record', {'record': rows}); 
       }); 
       connection.execute('SELECT records.name FROM records WHERE records.id = 1', [], function (err, rows) { 
         if (err) { 
          console.log('error: ' + err); 
         } 
         socket.emit('response:name', {'record': rows}); 
         console.log('name= ' + rows); 
       }); 
       connection.close(); 
       } 
}); 

結果是:

連接到Oracle
參數= [目標對象]
名= [{NAME:ARD}]

+0

你使用的模塊完全相同(Oracle或DB-Oracle)的? –

+0

我使用「oracle 0.2.0」 – user2890262

回答

0

您應該更新您的oracle模塊的版本最新的 - 0.3.4 它更好地支持BLOB。

你可以做到這一點如下:

npm update oracle 
+0

我更新了我的oracle模塊,但我仍然有一些麻煩與我blob ...現在,我試圖提取blob(OCCIBLOB類型)從Oracle調用存儲過程(調用ReadBasicBolb)。該方法在outparams.js中定義(請參閱github.com/feedhenry/node-oracle/blob/master/test/outparams.js),但我沒有達到預期結果。實際上,每次我執行呼叫時,我都會以隨機的方式看到不同的結果......任何人都知道爲什麼OOCIBLOB是唯一沒有在outparmas.js中進行驗證測試的方法?也許OCCIBLOB尚未驗證? – user2890262

+0

您指的是原始模塊的6個月版本的分叉版本:https://github.com/nearinfinity/node-oracle您是否可以使用原版模塊?檢查你有的模塊的版本 - 它應該是[email protected]。它支持BLOB我在回答中提到的 –

+0

是的,我使用0.3.4。並感謝這一點,我不再獲得空的結果。但是,每次執行該過程時,我都會達到不同的值... – user2890262