@ü.li:Listing 1: Tabelle EMP lesen mit Node.js @li:var oracledb = require('oracledb'); function printEMPResults(err, result) { console.log("printEMPResults() start"); if (err) { console.error(err.message); return; } console.log(result.rows); console.log("printEMPResults() end"); } function executeEMPQuery(err, connection) { console.log("executeEMPQuery() start"); if (err) { console.error(err.message); return; } connection.execute( "SELECT * from EMP where EMPNO = 7844", [], printEMPResults // aufrufen, wenn fertig ); console.log("executeEMPQuery() end"); } console.log("main() start"); oracledb.getConnection( { user : "scott", password : "*****", connectString : "db-server:db-port/db-service" }, executeEMPQuery // aufrufen, wenn fertig ); console.log("main() end"); @ü.li:Listing 2:Ausführung mit dem Executable node @li:main() start main() end executeEMPQuery() start executeEMPQuery() end printEMPResults() start [ [ 7844, 'TURNER', 'SALESMAN', 7698, Tue Sep 08 1981 01:00:00 GMT+0200 (CEST), 1500, 0, 30 ] ] printEMPResults() end @ü.li:Listing 3:JSON-Service mit Node.js @li:var oracledb = require('oracledb'); var express = require('express'); function processEmp(req, res) { oracledb.getConnection( { user : "scott", password : "*****", connectString : "db-server:db-port/db-service" }, function (err, connection) { if (err) { console.error(err.message); return; } connection.execute( "SELECT * from EMP", [], function (err, result) { if (err) { console.error(err.message); return; } connection.release(function(err) {}); res.writeHead(200, {'Content-Type': 'application/json'}); res.end(JSON.stringify(result.rows)); } ); }); } var app = express(); app.get ("/emp/*", processEmp); app.listen(9099, function () {}); @ü.li:Listing 4:JSON-Service mit Connection Pool @li:var oracledb = require('oracledb'); var express = require('express'); var gPool; function processEmp(req, res) { gPool.getConnection(function (err, connection) { if (err) { console.error(err.message); return; } connection.execute( "SELECT * from EMP", [], function (err, result) { if (err) { console.error(err.message); return; } connection.release(function(err) {}); res.writeHead(200, {'Content-Type': 'application/json'}); res.end(JSON.stringify(result.rows)); } ); }); } oracledb.createPool( { user : "scott", password : "tiger", connectString : "db-server:db-port/db-service" poolMin : 5, poolMax : 10 }, function(err, pool) { gPool = pool; var app = express(); app.get ("/emp/*", processEmp); app.listen(9099, function () {}); } ); @ü.li:Listing 5: SQL Update mit Node.js @li: : connection.execute( "update EMP set SAL = :sal where EMPNO = :empno", {sal: 4000, empno: 7839}, function (err, result) { if (err) { console.error(err.message); return; } console.log("table EMP updated: " + result.rowsAffected + " rows affected"); connection.commit(function(err) {}); connection.release(function(err) {}); } ); : @ü.li:Listing 6: Stored Procedures mit Node.js @li: : connection.execute( "begin stored_procedure(:inparam, :outparam); end;", { inparam: 4000, outparam: { dir: oracledb.BIND_OUT, type: oracledb.NUMBER } }, function (err, result) { console.log("Ausgabe: " + result.outBinds.outparam); connection.release(function(err) {}); } ); : @ü.li:Listing 7: Ein Node.js Programm identifiziert sich selbst @li: gPool.getConnection(function (err, connection) { connection.module = "IX Artikel node-oracledb"; connection.action = "JSON Express Service"; connection.execute( "SELECT * from EMP", [], function (err, result) { ... } ); connection.module = ""; connection.action = ""; connection.release(function(err) {}); }); @ü.li:Listing 8: Sicht des DBA auf Datenbanksitzungen @li:SQL> select username, sid, serial#, action, module from v$session where username='SCOTT' USERNAME SID ACTION MODULE -------- ------ ------------------------- ------------------------------------------ SCOTT 256 JSON Express Service IX Artikel node-oracledb SCOTT 14 node@sccloud037.de.oracle.com (TNS V1-V3) SCOTT 267 node@sccloud037.de.oracle.com (TNS V1-V3)