UNPKG

all-node-oracle

Version:

A NodeJS and Oracle DB integration, NodeJS act as http gateway for plsql server pages

161 lines (131 loc) 5.13 kB
<script src="header.js"></script> <div id="title"> Call Oracle PL/SQL stored procedure with javascript in NodeJS </div> The PSP.WEB software is tested on ORACLE DATABASE 11g(EE & XE) and NodeJS v0.6.2. Introduction =============================================================== Noradle is not limited to gateway the PL/SQL server pages, but can do more. 1. let javascript to call oracle plsql procedure for result, <br/> or just submit data through parameters or request body 2. let javascript to call oracle message stream procedure for catching database event/message/command instantly <br/> so it can be used for oracle to call NodeJS proxy for any external call, </br> this way, Noracle extend oracle db for its lack of external access ability Call for result page and convert the page to result sets =============================================================== In Noradle(psp.web), you can let javascript call oracle plsql stored procedure, just like the code example as below ``` var Noradle = require('..') , dbc = new Noradle.DBCall('demo', 'theOnlyDB') ; Noradle.DBCall.init({oracle_port : 1523}); function UnitTest(){ dbc.call('db_src_b.example', function(status, page, headers){ console.log('status code is %d', status); if (status != 200) { console.error('status is', status); return; } console.log('\n\nthe original result page is :'); console.log(page); console.log('\n\n', 'the parsed result sets is :'); var rss = Noradle.RSParser.parse(page); for (var n in rss) { var rs = rss[n]; console.log('\n', 'ResultSet', n, 'is :'); console.log(rs); } }); } UnitTest(); UnitTest(); UnitTest(); ``` In oracle side, the `"db_src_b.example"` is : ``` create or replace package body db_src_b is procedure example is cur sys_refcursor; v1 varchar2(50) := 'psp.web'; v2 number := 123456; v3 date := date '1976-10-26'; begin if r.call_type = 'HTTP' then h.content_type(h.mime_text, 'UTF-8'); elsif r.call_type = 'DATA' then h.line('# You are not required to write " h.content_type(h.mime_text, ''UTF-8'') " if call by NodeJS.'); end if; h.line('# a stardard psp.web result sets example page'); h.line('# It can be used in browser or NodeJS'); h.line('# You can use some standard parser or write your own ' || 'parsers to convert the raw resultsets to javascript data object'); h.line('# see PL/SQL source at ' || r.dad_path_full || '/src_b.proc/' || r.prog); open cur for select * from user_objects; rs.print('test', cur); open cur for select v1 as name, v2 as val, v3 as ctime from dual; rs.print('namevals', cur); end; end db_src_b; ``` The result log is as this: ``` status code is 200 the original result page is : # You are not required to write " h.content_type(h.mime_text, 'UTF-8') " if call by NodeJS. # a stardard psp.web result sets example page # It can be used in browser or NodeJS # You can use some standard parser or write your own parsers to convert the raw resultsets to javascript data object # see PL/SQL source at :////src_b.proc/db_src_b.example [test] OBJECT_NAME:1,SUBOBJECT_NAME:1,OBJECT_ID:2,DATA_OBJECT_ID:2,OBJECT_TYPE:1,CREATED:12,LAST_DDL_TIME:12,TIMESTAMP:1,STATUS:1,TEMPORARY:1,GENERATED:1,SECONDARY:1,NAMESPACE:2,EDITION_NAME:1 TERM_T,,73612,73612,TABLE,2012-04-10 09:47:12,2012-04-10 09:47:12,2012-04-10:09:47:12,VALID,N,N,N,1, PK_TERM,,73613,73613,INDEX,2012-04-10 09:47:13,2012-04-10 09:47:13,2012-04-10:09:47:13,VALID,N,N,N,4, USER_T,,73614,73614,TABLE,2012-04-10 09:47:13,2013-03-27 20:42:49,2012-04-10:09:47:13,VALID,N,N,N,1, ... [namevals] NAME:1,VAL:2,CTIME:12 psp.web,123456,1976-10-26 00:00:00 the parsed result sets is : ResultSet test is : { name: 'test', attrs: [ { name: 'OBJECT_NAME', dataType: '1' }, { name: 'SUBOBJECT_NAME', dataType: '1' }, { name: 'OBJECT_ID', dataType: '2' }, { name: 'DATA_OBJECT_ID', dataType: '2' }, { name: 'OBJECT_TYPE', dataType: '1' }, { name: 'CREATED', dataType: '12' }, { name: 'LAST_DDL_TIME', dataType: '12' }, { name: 'TIMESTAMP', dataType: '1' }, { name: 'STATUS', dataType: '1' }, { name: 'TEMPORARY', dataType: '1' }, { name: 'GENERATED', dataType: '1' }, { name: 'SECONDARY', dataType: '1' }, { name: 'NAMESPACE', dataType: '2' }, { name: 'EDITION_NAME', dataType: '1' } ], rows: [ { OBJECT_NAME: 'TERM_T', SUBOBJECT_NAME: '', OBJECT_ID: '73612', DATA_OBJECT_ID: '73612', OBJECT_TYPE: 'TABLE', CREATED: '2012-04-10 09:47:12', LAST_DDL_TIME: '2012-04-10 09:47:12', TIMESTAMP: '2012-04-10:09:47:12', STATUS: 'VALID', TEMPORARY: 'N', GENERATED: 'N', SECONDARY: 'N', NAMESPACE: '1', EDITION_NAME: '' }, ... ] ResultSet namevals is : { name: 'namevals', attrs: [ { name: 'NAME', dataType: '1' }, { name: 'VAL', dataType: '2' }, { name: 'CTIME', dataType: '12' } ], rows: [ { NAME: 'psp.web', VAL: '123456', CTIME: '1976-10-26 00:00:00' } ] } ``` <script src="footer.js"></script>