noradle
Version:
A NodeJS and Oracle DB integration, NodeJS act as http gateway for plsql server pages
153 lines (130 loc) • 4.99 kB
Markdown
Want to build solid information system solely on PL/SQL and javascript easily,
no rely on any other programming language or technical stack? develop with NORADLE.
<center></center>
What's NORADLE?
=================
The word NORADLE is combination of node.js and oracle,
It aims at
1. write http servlet in PL/SQL with extremely concise code
2. with node.js as http gateway, give full http protocol support for oracle environment
3. node.js accessibility to oracle, give node.js ecosystem a real thustworthy db backend
take a first glance at pl/sql servlet code
==========================================
### bind data into html
```plsql
procedure bind_data is
cursor c_packages is
select *
from user_objects a
where a.object_type = 'PACKAGE'
and rownum <= 5
order by a.object_name asc;
begin
b.l('<!DOCTYPE html>');
o.t('<html>');
o.t('<body>');
o.t('<table rules=all cellspacing=0 cellpadding=5 style="border:1px solid silver;">');
o.t(' <caption>', 'bind sql data to table example');
o.t(' <thead>', o.t('<tr>', m.w('<th>@</th>', 'package name,created')));
o.t(' <tbody>');
for i in c_packages loop
o.t('<tr>');
o.t(' <td>', i.object_name);
o.t(' <td>', t.d2s(i.created));
o.t('</tr>');
end loop;
o.t(' </tbody>');
o.t('</table>');
o.t('</body>');
o.t('</html>');
end;
```
### use json data service to populate chart
```plsql
create or replace package body chart_b is
procedure common_preface(default_type varchar2) is
v_chart_type varchar2(30) := r.getc('chart_type', default_type);
begin
src_b.header;
o.u('<link rel=stylesheet/>', '[animate.css]');
o.u('<script>', '[chart.js]', '');
o.u('<script>', '[zepto.js]', '');
o.u('<script>', '[underscore.js]', '');
o.t('<canvas#cc width=600 height=400>', '');
o.t('<script>',
t.ps('
var ctx = document.getElementById("cc").getContext("2d")
, demoChart = new Chart(ctx)
, chartType=":1"
;',
st(v_chart_type)));
end;
procedure salary_min_max_by_job_id is
cur sys_refcursor;
begin
if r.is_xhr then
open cur for
select a.job_id, count(*) cnt, avg(a.salary) avg, min(a.salary) min, max(a.salary) max
from employees a
group by a.job_id
order by avg asc;
rs.print(cur);
return;
end if;
common_preface('Bar');
o.t('<div#links>');
o.u(' <a>', r.prog || '?chart_type=Line', 'Line');
o.u(' <a>', r.prog || '?chart_type=Bar', 'Bar');
o.u(' <a>', r.prog || '?chart_type=Radar', 'Rader');
o.t('</div>');
b.l('<script>
$.getJSON(location.pathname+"?data", function(data){
var salaries = data.$DATA.rows;
var chartData = {
labels : _.pluck(salaries, "job_id"),
datasets : [
{
fillColor : "rgba(220,220,220,0.5)",
strokeColor : "rgba(220,220,220,1)",
pointColor : "rgba(220,220,220,1)",
pointStrokeColor : "#fff",
data : _.pluck(salaries, "min")
},
{
fillColor : "rgba(151,187,205,0.5)",
strokeColor : "rgba(151,187,205,1)",
pointColor : "rgba(151,187,205,1)",
pointStrokeColor : "#fff",
data : _.pluck(salaries, "max")
}
]
};
demoChart[chartType](chartData);
});</script>');
end;
end chart_b;
```
What NORADLE provide?
=====================
* NORADLE support full dynamic(data driving) web development(whether for html page service or json data service),
but more concise than PHP, J2EE, ...
* NORADLE NDBC make node ecosystem embracing oracle, expand node's realm to serious enterprise information systems
* NORADLE call out feature extend oracle PL/SQL to access external service/resource, break restrictions
Core thinking
==============
* use pl/sql stored procedure to implement application/business logic
- servlet code that access data should be as close as the data, avoid complexity and develop-time and runtime overhead
- all SQL should be in PL/SQL stored procedure, no string concat, no network transfer
- no triditional templating, print html/json with concise API, just use pl/sql, introduce no excessive templating language
- give all function that a triditional servlet tech can provide, but be more concise and easier to master
- be aware of that middle layer JAVA/PHP/.NET/PYTHON/RUBY... is superfluous, except adding comlexity
- enjoy the good of oracle, advanced SQL, availility, stability, performance, scalability, tunable...
* node.js can access oracle, and vice versa, they can aid each other
- node.js give oracle a http servlet container environment
- pl/sql can call out by node.js, extending oracle
- by node.js, oracle became a full servlet container, integrate code and data seamlessly
- by connectivity to oracle, node.js ecosysetm will extend to the area of enterprise information system
the resource for NORADLE
========================
### [document site](http://docs.noradle.com/) http://docs.noradle.com
### [demo site](http://demo.noradle.com/) http://demo.noradle.com