Componente middleware (oracle-plsql.js)
by Plurimedia
JavaScript
const oracledb = require('oracledb')
const conf = require('./oracle-config')
const PkgGateway = 'gateway'
const log = require('../lib/log')
oracledb.autoCommit = true
oracledb.fetchAsString = [oracledb.CLOB]
async function initialize () {
await oracledb.createPool(conf.oracle_cn)
}
async function shutdown () {
await oracledb.getPool().close()
}
exports.initialize = initialize
exports.shutdown = shutdown
function doRelease (conn) {
conn.release(function (err) {
if (err) {
log.error('release() error', err.message)
}
})
}
let extractResult = async function (result) {
return new Promise(function (resolve, reject) {
if (result && result.outBinds && result.outBinds.ret) {
let lob = result.outBinds.ret
let clobString = ''
lob.setEncoding('utf8')
lob.on('data', function (chunk) { clobString += chunk })
lob.on('close', function (err) {
if (!err) resolve(JSON.parse(clobString))
else reject(err)
})
lob.on('error', function (err) {
reject(err)
})
} else resolve([])
})
}
let doConnect = async function (cb) {
return oracledb.getConnection()
}
let doCreateTempLob = function (conn) {
return conn.createLob(oracledb.CLOB)
}
let doLoadTempLob = function (conn, data) {
return new Promise(function (resolve, reject) {
doCreateTempLob(conn)
.then((templob) => {
templob.on(
'close',
function () { })
templob.on(
'error',
function (err) {
reject(err)
})
templob.on(
'finish',
function () {
resolve(templob)
})
var Readable = require('stream').Readable
var s = new Readable()
s.push(JSON.stringify(data))// the string you want
s.push(null)
s.pipe(templob)
},
(err) => { reject(err) })
})
}
exports.readAll = async function (pkg, pars, ctx) {
let sql = 'begin ' + PkgGateway +...