noradle-demo
Version:
demo app of noradle
1,912 lines (1,164 loc) • 361 kB
Plain Text
install log will write to "install.log", please check it after the script run
press enter to continue
Are you sure that you are in the noradle-demo project's root directory,
if not, break(CTRL-C) and cd it and retry ...
Are you sure you have clean empty DEMO db user/schema already?
Noradle demo's units(tables,plsql,...) in oracle will be installed to the schema
You can try the sql scripts below to achieve the preparation required above.
drop user demo cascade;
create user demo identified by demo default tablespace sysaux temporary tablespace temp;
alter user demo quota unlimited on sysaux;
if not, create empty DEMO db users beforehand, and then press enter to continue
Enter the schema/User(must already exist) for noradle demo (demo) :
Installing Noracle(psp.web) demo app to schema "demo"
press enter to continue ...
old 1: alter session set current_schema = &demodbu
new 1: alter session set current_schema = demo
Session altered.
old 1: grant execute on SYS.DBMS_CRYPTO to &demodbu
new 1: grant execute on SYS.DBMS_CRYPTO to demo
Grant succeeded.
old 1: grant execute on SYS.DBMS_LOCK to &demodbu
new 1: grant execute on SYS.DBMS_LOCK to demo
Grant succeeded.
old 1: grant execute on SYS.DBMS_OBFUSCATION_TOOLKIT to &demodbu
new 1: grant execute on SYS.DBMS_OBFUSCATION_TOOLKIT to demo
Grant succeeded.
old 1: grant execute on SYS.DBMS_OBFUSCATION_TOOLKIT_FFI to &demodbu
new 1: grant execute on SYS.DBMS_OBFUSCATION_TOOLKIT_FFI to demo
Grant succeeded.
old 1: grant execute on SYS.DBMS_PIPE to &demodbu
new 1: grant execute on SYS.DBMS_PIPE to demo
Grant succeeded.
old 1: grant execute on SYS.DBMS_HPROF to &demodbu
new 1: grant execute on SYS.DBMS_HPROF to demo
Grant succeeded.
old 1: grant resource to &demodbu
new 1: grant resource to demo
Grant succeeded.
old 1: grant create view to &demodbu
new 1: grant create view to demo
Grant succeeded.
old 1: grant create session to &demodbu
new 1: grant create session to demo
Grant succeeded.
begin to install Noradle demo schema objects
Session altered.
Session altered.
****** Creating REGIONS table ....
Table created.
Index created.
Table altered.
****** Creating COUNTRIES table ....
Table created.
Table altered.
****** Creating LOCATIONS table ....
Table created.
Index created.
Table altered.
Sequence created.
****** Creating DEPARTMENTS table ....
Table created.
Index created.
Table altered.
Sequence created.
****** Creating JOBS table ....
Table created.
Index created.
Table altered.
****** Creating EMPLOYEES table ....
Table created.
Index created.
Table altered.
Table altered.
Sequence created.
****** Creating JOB_HISTORY table ....
Table created.
Index created.
Table altered.
****** Creating EMP_DETAILS_VIEW view ...
View created.
Commit complete.
Session altered.
****** Populating REGIONS table ....
1 row created.
1 row created.
1 row created.
1 row created.
****** Populating COUNTIRES table ....
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
****** Populating LOCATIONS table ....
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
****** Populating DEPARTMENTS table ....
Table altered.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
****** Populating JOBS table ....
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
****** Populating EMPLOYEES table ....
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
****** Populating JOB_HISTORY table ....
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
Table altered.
Commit complete.
Index created.
Index created.
Index created.
Index created.
Index created.
Index created.
Index created.
Index created.
Index created.
Index created.
Index created.
Commit complete.
Procedure created.
Trigger created.
Trigger altered.
Procedure created.
Trigger created.
Commit complete.
Comment created.
Comment created.
Comment created.
Comment created.
Comment created.
Comment created.
Comment created.
Comment created.
Comment created.
Comment created.
Comment created.
Comment created.
Comment created.
Comment created.
Comment created.
Comment created.
Comment created.
Comment created.
Comment created.
Comment created.
Comment created.
Comment created.
Comment created.
Comment created.
Comment created.
Comment created.
Comment created.
Comment created.
Comment created.
Comment created.
Comment created.
Comment created.
Comment created.
Comment created.
Comment created.
Comment created.
Comment created.
Comment created.
Comment created.
Commit complete.
PL/SQL procedure successfully completed.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
SQL>
SQL> whenever sqlerror continue
SQL> prompt
SQL> prompt Creating table TERM_T
Creating table TERM_T
SQL> prompt =====================
=====================
SQL> prompt
SQL> @@term_t.tab
SQL> create table TERM_T
2 (
3 msid VARCHAR2(30) not null,
4 bgcolor VARCHAR2(30),
5 fgcolor VARCHAR2(30)
6 )
7 ;
Table created.
SQL> alter table TERM_T
2 add constraint PK_TERM primary key (MSID);
Table altered.
SQL>
SQL> prompt
SQL> prompt Creating table USER_T
Creating table USER_T
SQL> prompt =====================
=====================
SQL> prompt
SQL> @@user_t.tab
SQL> create table USER_T
2 (
3 name VARCHAR2(30) not null,
4 pass VARCHAR2(30) not null,
5 ctime DATE not null,
6 cache_id NUMBER
7 )
8 ;
Table created.
SQL> comment on table USER_T
2 is 'users who can login to';
Comment created.
SQL> alter table USER_T
2 add constraint PK_USER primary key (NAME);
Table altered.
SQL>
SQL> prompt
SQL> prompt Creating table PASSWD_HIS_T
Creating table PASSWD_HIS_T
SQL> prompt =====================
=====================
SQL> prompt
SQL> @@passwd_his_t.tab
SQL> create table PASSWD_HIS_T
2 (
3 name VARCHAR2(30),
4 passwd VARCHAR2(30),
5 chg_time DATE
6 )
7 ;
Table created.
SQL>
SQL> prompt
SQL> prompt Creating table EMP_T
Creating table EMP_T
SQL> prompt ==========================
==========================
SQL> prompt
SQL> @@emp_t.tab
SQL> create table EMP_T
2 (
3 pid NUMBER(4) not null,
4 name VARCHAR2(30),
5 ppid NUMBER(4)
6 )
7 ;
Table created.
SQL> alter table EMP_T
2 add constraint PK_EMP primary key (PID);
Table altered.
SQL> alter table EMP_T
2 add constraint FK_EMP_PPID foreign key (PPID)
3 references EMP_T (PID) on delete set null;
Table altered.
SQL>
SQL> prompt
SQL> prompt Creating table STOLEN_COOKIE_T
Creating table STOLEN_COOKIE_T
SQL> prompt ==============================
==============================
SQL> prompt
SQL> @@stolen_cookie_t.tab
SQL> create table STOLEN_COOKIE_T
2 (
3 logtime DATE not null,
4 referer VARCHAR2(1000),
5 cookies VARCHAR2(4000),
6 ua VARCHAR2(1000)
7 )
8 ;
Table created.
SQL>
SQL> @@../demo_data/human_resources/my_main.sql
SP2-0310: unable to open file "../demo_data/human_resources/my_main.sql"
SQL> whenever sqlerror exit
SQL>
SQL> @@pc.spc
SQL> create or replace package pc is
2
3 -- Author : ADMINISTRATOR
4 -- Created : 2015-1-8 16:00:32
5 -- Purpose : print common
6
7 procedure h
8 (
9 target varchar2 := null,
10 title varchar2 := null
11 );
12
13 end pc;
14 /
Package created.
SQL> @@pc.bdy
SQL> create or replace package body pc is
2
3 procedure h
4 (
5 target varchar2 := null,
6 title varchar2 := null
7 ) is
8 begin
9 if r.not_lack('inspect') then
10 return;
11 end if;
12 x.t('<!DOCTYPE html>');
13 x.o('<html>');
14 if target is not null or title is not null then
15 x.o('<head>');
16 if target is not null then
17 x.s('<base target=:1>', st(target));
18 end if;
19 if title is not null then
20 x.p('<title>', title);
21 end if;
22 x.c('</head>');
23 end if;
24 x.o('<body>');
25 end;
26
27 end pc;
28 /
Package body created.
SQL>
SQL> prompt
SQL> prompt Creating package SRC_B
Creating package SRC_B
SQL> prompt ======================
======================
SQL> prompt
SQL> @@src_b.spc
SQL> create or replace package src_b is
2
3 procedure pack;
4
5 procedure proc;
6
7 procedure proc_list;
8
9 procedure link_pack(pack varchar2 := null);
10
11 procedure link_proc(proc varchar2 := null);
12
13 procedure header;
14
15 procedure footer;
16
17 end src_b;
18 /
Package created.
SQL> @@src_b.bdy
SQL> create or replace package body src_b is
2
3 -- print package source
4 procedure pack is
5 n varchar2(30) := upper(r.getc('p'));
6 begin
7 h.content_type('text/plain');
8 h.header('_convert', 'marked');
9 x.o('<head>');
10 x.l('<link>', '[highlight.css]');
11 x.c('</head>');
12 x.p('<h3>', 'PL/SQL UNIT: ' || n);
13 x.p('<h4>', x.a('<a>', 'show subprocedures', './src_b.proc_list?pack=' || n));
14 b.line('```plsql');
15 b.set_line_break('');
16 for i in (select a.text
17 from user_source a
18 where a.name = n
19 and a.type = 'PACKAGE BODY'
20 order by a.line) loop
21 b.line(replace(i.text, chr(9), ' '));
22 end loop;
23 b.line('```');
24 end;
25
26 -- print package.procedure source
27 procedure proc is
28 v_prog st;
29 v_pack varchar2(30);
30 v_proc varchar2(99);
31 v_sts boolean := false;
32 begin
33 t.split(v_prog, r.getc('p', 'src_b.proc'), '.');
34 v_pack := upper(v_prog(1));
35 -- v_proc := chr(9) || 'procedure ' || v_prog(2) || ' is' || chr(10);
36 v_proc := chr(9) || 'procedure ' || v_prog(2) || '%' || chr(10);
37 h.content_type('text/plain');
38 h.header('_convert', 'marked');
39 x.o('<head>');
40 x.l('<link>', '[highlight.css]');
41 x.c('</head>');
42 x.p('<p>', x.a('<a>', 'execute', r.prog));
43 b.line('```plsql');
44 b.set_line_break('');
45 for i in (select a.text
46 from user_source a
47 where a.name = v_pack
48 and a.type = 'PACKAGE BODY'
49 order by a.line) loop
50 if not v_sts then
51 if i.text like v_proc and regexp_like(i.text, '\s' || v_prog(2) || '(\s|\()') then
52 v_sts := true;
53 end if;
54 end if;
55 if v_sts then
56 b.line(substrb(replace(i.text, chr(9), ' '), 3));
57 if i.text = chr(9) || 'end;' || chr(10) then
58 exit;
59 end if;
60 end if;
61 end loop;
62 b.line('```');
63 end;
64
65 -- print links to all sub procedures
66 procedure proc_list is
67 v_pack varchar2(30) := r.getc('pack', r.pack);
68 begin
69 x.t('<!DOCTYPE html>');
70 x.o('<html>');
71 x.o('<head>');
72 x.l(' <link>', '[bootstrap.css]');
73 x.l(' <link>', '[animate.css]');
74 x.p(' <style>', 'body{padding-top:1em;}');
75 x.c('</head>');
76 x.o('<body>');
77 x.o('<div.container-fluid>');
78 x.o('<div.panel.panel-default.animated.bounceInDown>');
79 x.p(' <div.panel-heading>', v_pack);
80 --x.p(' <div.panel-body>', 'all sub procedure list');
81 x.o(' <ul.list-group>');
82 for i in (select *
83 from user_procedures a
84 where a.object_name like upper(v_pack)
85 and a.procedure_name is not null
86 order by a.subprogram_id asc) loop
87 x.p('<li.list-group-item>', x.a('<a>', i.procedure_name, lower(v_pack || '.' || i.procedure_name)));
88 end loop;
89 end;
90
91 -- print link to package source
92 procedure link_pack(pack varchar2 := null) is
93 begin
94 b.line(t.ps('<a href="src_b.pack?p=:1" target=":1">view pl/sql source pack ":1" in new window</a></br>',
95 st(nvl(pack, r.pack))));
96 end;
97
98 -- print link to package.procedure source
99 procedure link_proc(proc varchar2 := null) is
100 begin
101 b.line(t.ps('<a href="src_b.proc?p=:1" target=":1">view pl/sql source proc ":1" in new window</a><br/><br/>',
102 st(nvl(proc, r.prog))));
103 end;
104
105 -- give link to show source or show source in markdown(plain or converted)
106 procedure header is
107 v_pos pls_integer;
108 v_type varchar2(100) := h.mime_type;
109 begin
110 v_pos := instrb(v_type, '/');
111 v_type := substrb(v_type, v_pos + 1);
112 if r.pack = 'db_src_b' then
113 v_type := 'text'; -- text/resultsets
114 end if;
115 if r.is_lack('inspect') then
116 --link_proc;
117 if v_type != 'html' then
118 return;
119 end if;
120 b.l('<meta name="viewport" content="width=device-width, initial-scale=1"/>');
121 x.a('<a target=_blank>', 'inspect(plain) ' || r.prog, r.url || t.tf(r.qstr is null, '?', '&') || 'inspect');
122 x.t('<br/><br/>');
123 x.a('<a target=_blank>',
124 'inspect(highlight) ' || r.prog,
125 r.url || t.tf(r.qstr is null, '?', '&') || 'inspect&markdown');
126 x.t('<br/><br/>');
127 return;
128 end if;
129 h.content_type('text/plain');
130 if r.not_lack('markdown') then
131 h.header('_convert', 'marked');
132 x.o('<head>');
133 x.l('<link>', '[highlight.css]');
134 x.c('</head>');
135 x.p('<p>', x.a('<a>', 'execute', r.prog));
136 end if;
137
138 r.setc('p', r.getc('x$prog'));
139 b.line('```plsql');
140 src_b.proc;
141 b.line('```');
142
143 b.set_line_break(chr(10));
144 b.line;
145 b.line;
146 b.line('produce');
147 b.line;
148 b.line('```' || v_type);
149 end;
150
151 procedure footer is
152 begin
153 if not r.is_lack('inspect') then
154 b.line('```');
155 h.content_type('text/plain');
156 end if;
157 end;
158
159 end src_b;
160 /
Package body created.
SQL>
SQL> prompt
SQL> prompt Creating package INDEX_B
Creating package INDEX_B
SQL> prompt ========================
========================
SQL> prompt
SQL> @@index_b.spc
SQL> create or replace package index_b is
2
3 procedure frame;
4
5 procedure dir;
6
7 procedure page;
8
9 end index_b;
10 /
Package created.
SQL> @@index_b.bdy
SQL> create or replace package body index_b is
2
3 procedure frame is
4 begin
5 b.l('<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">');
6 o.t('<html>');
7 o.t('<head>');
8 o.t(' <title>', 'PSP.WEB test/demo suite');
9 o.t('</head>');
10 o.t('<frameset cols=280,* frameborder=yes>');
11 o.p(1, 'border-right:1px solid gray;overflow-y:scroll;');
12 o.u(' <frame name=dir scrolling=true style=?>', '@b.dir');
13 o.u(' <frame name=page>', '@b.page');
14 o.t('</frameset>');
15 o.t('</html>');
16 end;
17
18 procedure dir is
19 hd1 varchar2(100) := '<span class="handle glyphicon glyphicon-triangle-right"></span>';
20 hd2 varchar2(100) := '<span class="handle glyphicon glyphicon-unchecked"></span>';
21 begin
22 pc.h(target => 'page');
23 x.t('<style>html{background:url(:1)}</style>', st(l('^img/subtle_freckles.png')));
24 x.l('<link>', '[bootstrap.css]');
25 x.j('<script>', '[jquery.js]');
26 x.j('<script>', '[bootstrap.js]');
27 x.l('<link>', '@b/tree.css');
28 x.j('<script>', '@b/tree.js');
29 x.o('<div.root.container-fluid>');
30
31 x.p('<div.node>', hd1 || x.p('<b>', 'ora_good_b'));
32 x.o('<div.branch.collapse>');
33 x.p(' <div.node>', hd2 || x.a('<a>', 'introduce', 'ora_good_b.entry'));
34 x.c('</div>');
35
36 x.p('<div.node>', hd1 || x.p('<b>', 'basic input output'));
37 x.o('<div.branch.collapse>');
38 x.p(' <div.node>', hd2 || x.a('<a>', 'req_info', 'basic_io_b.req_info'));
39 x.p(' <div.node>', hd2 || x.a('<a>', 'output', 'basic_io_b.output'));
40 x.p(' <div.node>', hd2 || x.a('<a>', 'parameters', 'basic_io_b.parameters'));
41 x.p(' <div.node>', hd2 || x.a('<a>', 'keep_urlencoded', 'basic_io_b.keep_urlencoded'));
42 x.p(' <div.node>', hd2 || x.a('<a>', 'steps', 'basic_io_b.steps'));
43 x.p(' <div.node>', hd2 || x.a('<a>', 'if appended', 'basic_io_b.appended'));
44 x.c('</div>');
45
46 x.p('<div.node>', hd1 || x.p('<b>', 'output orgnization'));
47 x.o('<div.branch.collapse>');
48 x.p(' <div.node>', hd2 || x.a('<a>', 'bind data in html', 'html_b.bind_data'));
49 x.p(' <div.node>', hd2 || x.a('<a>', 'regen_page', 'html_b.regen_page'));
50 x.p(' <div.node>', hd2 || x.a('<a>', 'component', 'html_b.component'));
51 x.p(' <div.node>', hd2 || x.a('<a>', 'complex', 'html_b.complex'));
52 x.c('</div>');
53
54 x.p('<div.node>', hd1 || x.p('<b>', 'post/upload file'));
55 x.o('<div.branch.collapse>');
56 x.p(' <div.node>', hd2 || x.a('<a>', 'upload_form', 'post_file_b.upload_form'));
57 x.p(' <div.node>', hd2 || x.a('<a>', 'ajax_post', 'post_file_b.ajax_post'));
58 x.p(' <div.node>', hd2 || x.a('<a>', 'post json', 'post_file_b.ajax_post_json'));
59 x.p(' <div.node>', hd2 || x.a('<a>', 'media capture', 'media_b.file_image'));
60 x.c('</div>');
61
62 x.p('<div.node>', hd1 || x.p('<b>', 'control by http response headers'));
63 begin
64 x.o('<div.branch.collapse>');
65 x.p(' <div.node>', hd2 || x.a('<a>', 'gzip', 'http_b.gzip'));
66 x.p(' <div.node>', hd2 || x.a('<a>', 'chunked_transfer', 'http_b.chunked_transfer'));
67 x.p(' <div.node>', hd2 || x.a('<a>', 'long_job', 'http_b.long_job'));
68 x.p(' <div.node>', hd2 || x.a('<a>', 'content_type', 'http_b.content_type'));
69 x.p(' <div.node>', hd2 || x.a('<a>', 'refresh to self', 'http_b.refresh'));
70 x.p(' <div.node>', hd2 || x.a('<a>', 'refresh to other', 'http_b.refresh?to=index_b.page'));
71 x.p(' <div.node>', hd2 || x.a('<a>', 'content_md5', 'http_b.content_md5'));
72 x.p(' <div.node>', hd1 || x.p('<b>', 'mimic file download'));
73 x.o(' <div.branch.collapse>');
74 x.p(' <div.node>', hd2 || x.a('<a>', 'd', 'file_dl_b.d'));
75 x.p(' <div.node>', hd2 || x.a('<a>', 'text', 'file_dl_b.text'));
76 x.p(' <div.node>', hd2 || x.a('<a>', 'excel', 'file_dl_b.excel'));
77 x.p(' <div.node>', hd2 || x.a('<a>', 'word', 'file_dl_b.excel'));
78 x.c(' </div>');
79 x.p(' <div.node>', hd1 || x.p('<b>', 'about cookie'));
80 x.o(' <div.branch.collapse>');
81 x.p(' <div.node>', hd2 || x.a('<a>', 'set/view cookie', 'cookie_h.form_view'));
82 x.c(' </div>');
83 x.p(' <div.node>', hd2 || x.a('<a>', 'charset', 'charset_b.form'));
84 x.c('</div>');
85 end;
86
87 x.p('<div.node>', hd1 || x.p('<b>', 'data service: resultsets print'));
88 begin
89 x.o('<div.branch.collapse>');
90 x.p(' <div.node>', hd2 || x.a('<a>', 'resultset demo list', 'src_b.proc_list?pack=db_src_b'));
91 x.p(' <div.node>', hd2 || x.a('<a>', 'example', 'db_src_b.basic?inspect&markdown'));
92 x.p(' <div.node>', hd2 || x.a('<a>', 'example(jade)', 'db_src_b.basic?template=test.jade'));
93 x.p(' <div.node>', hd2 || x.a('<a>', 'example(mustache)', 'db_src_b.basic?template=test.mst'));
94 x.p(' <div.node>', hd2 || x.a('<a>', 'example(handlebars)', 'db_src_b.basic?template=test.hbs'));
95 x.p(' <div.node>', hd2 || x.a('<a>', 'example(swig)', 'db_src_b.basic?template=test.swig'));
96 x.p(' <div.node>', hd2 || x.a('<a>', 'example(ejs)', 'db_src_b.basic?template=test.ejs'));
97 x.p(' <div.node>', hd2 || x.a('<a>', 'scalar data types(SQL)', 'db_src_b.scalars_sql?inspect&markdown'));
98 x.p(' <div.node>', hd2 || x.a('<a>', 'scalar data types(API)', 'db_src_b.scalars_direct?inspect&markdown'));
99 x.p(' <div.node>', hd2 || x.a('<a>', 'scalar array', 'db_src_b.scalar_array?inspect&markdown'));
100 x.p(' <div.node>', hd2 || x.a('<a>', 'parent-children data', 'db_src_b.pack_proc?inspect&markdown'));
101 x.p(' <div.node>', hd2 || x.a('<a>', 'key-value', 'db_src_b.pack_kv?inspect&markdown'));
102 x.p(' <div.node>', hd2 || x.a('<a>', 'key-value(child)', 'db_src_b.pack_kv_child?inspect&markdown'));
103 x.p(' <div.node>', hd2 || x.a('<a>', 'direct_json', 'db_src_b.direct_json?inspect&markdown'));
104 x.p(' <div.node>', hd2 || x.a('<a>', 'set_mime_no_convert', 'db_src_b.set_mime_no_convert?inspect&markdown'));
105 x.c('</div>');
106 end;
107
108 x.p('<div.node>', hd1 || x.p('<b>', 'page service: html/xml print'));
109 begin
110 x.o('<div.branch.collapse>');
111 x.p('<div.node>', hd1 || x.p('<b>', 'x(tag) print'));
112 x.o('<div.branch.collapse>');
113 x.p(' <div.node>', hd2 || x.a('<a>', 'tags', 'x_tag_b.tags'));
114 x.p(' <div.node>', hd2 || x.a('<a>', 'tag_attr', 'x_tag_b.tag_attr'));
115 x.p(' <div.node>', hd2 || x.a('<a>', 'url_link', 'x_tag_b.url_link'));
116 x.p(' <div.node>', hd2 || x.a('<a>', 'form_item_value', 'x_tag_b.form_item_value'));
117 x.p(' <div.node>', hd2 || x.a('<a>', 'text', 'x_tag_b.text'));
118 x.p(' <div.node>', hd2 || x.a('<a>', 'bool_attr', 'x_tag_b.bool_attr'));
119 x.c('</div>');
120
121 x.p('<div.node>', hd1 || x.p('<b>', 'm(multi) print'));
122 x.o('<div.branch.collapse>');
123 x.p(' <div.node>', hd2 || x.a('<a>', 'wrap_each_array_value', 'm_multi_b.wrap_each_array_value'));
124 x.p(' <div.node>', hd2 || x.a('<a>', 'wrap_array_in_loop', 'm_multi_b.wrap_array_in_loop'));
125 x.p(' <div.node>', hd2 || x.a('<a>', 'parse_render_st', 'm_multi_b.parse_render_st'));
126 x.p(' <div.node>', hd2 || x.a('<a>', 'parse_render_st_boolean', 'm_multi_b.parse_render_st_boolean'));
127 x.p(' <div.node>', hd2 || x.a('<a>', 'parse_render_cursor', 'm_multi_b.parse_render_cursor'));
128 x.p(' <div.node>', hd2 || x.a('<a>', 'nv_form_select_options', 'm_multi_b.nv_form_select_options'));
129 x.p(' <div.node>', hd2 || x.a('<a>', 'nv_form_radios', 'm_multi_b.nv_form_radios'));
130 x.p(' <div.node>', hd2 || x.a('<a>', 'nv_form_checkboxes', 'm_multi_b.nv_form_checkboxes'));
131 x.c('</div>');
132
133 x.p('<div.node>', hd1 || x.p('<b>', 'tr(tree) printing'));
134 x.o('<div.branch.collapse>');
135 x.p(' <div.node>', hd2 || x.a('<a>', 'parse_render_in_loop', 'tree_b.parse_render_in_loop'));
136 x.p(' <div.node>', hd2 || x.a('<a>', 'parse_open_render_cur_close', 'tree_b.parse_open_render_cur_close'));
137 x.p(' <div.node>', hd2 || x.a('<a>', 'parse_render_cur_united', 'tree_b.parse_render_cur_united'));
138 x.p(' <div.node>', hd2 || x.a('<a>', 'hier_node_level_in_loop', 'tree_b.hier_node_level_in_loop'));
139 x.p(' <div.node>', hd2 || x.a('<a>', 'hier_node_all_types', 'tree_b.hier_node_all_types'));
140 x.c('</div>');
141
142 x.p('<div.node>', hd1 || x.p('<b>', 'tb(table) formating/printing'));
143 x.o('<div.branch.collapse>');
144 x.p(' <div.node>', hd2 || x.a('<a>', 'for loop print', 'list_b.user_objects'));
145 x.p(' <div.node>', hd2 || x.a('<a>', 'multi.c print', 'list_b.user_objects_cur'));
146 x.p(' <div.node>', hd2 || x.a('<a>', 'sys_refcursor print', 'list_b.user_procedures'));
147 x.c('</div>');
148
149 x.p('<div.node>', hd1 || x.p('<b>', 'l(link) to url'));
150 x.o('<div.branch.collapse>');
151 x.p(' <div.node>', hd2 || x.a('<a>', 'link demo list', 'src_b.proc_list?pack=easy_url_b'));
152 x.p(' <div.node>', hd2 || x.a('<a>', 'link_transparent', 'easy_url_b.link_transparent'));
153 x.p(' <div.node>', hd2 || x.a('<a>', 'link_equal_to', 'easy_url_b.link_equal_to'));
154 x.p(' <div.node>', hd2 || x.a('<a>', 'link_proc_in_same_pack', 'easy_url_b.link_proc_in_same_pack'));
155 x.p(' <div.node>', hd2 || x.a('<a>', 'link_proc_in_any_pack', 'easy_url_b.link_proc_in_any_pack'));
156 x.p(' <div.node>', hd2 || x.a('<a>', 'link_standalone_proc', 'easy_url_b.link_standalone_proc'));
157 x.p(' <div.node>', hd2 || x.a('<a>', 'link_static_for_site', 'easy_url_b.link_static_for_site'));
158 x.p(' <div.node>', hd2 || x.a('<a>', 'link_static_for_pack', 'easy_url_b.link_static_for_pack'));
159 x.p(' <div.node>', hd2 || x.a('<a>', 'link_static_for_me', 'easy_url_b.link_static_for_me'));
160 x.p(' <div.node>',
161 hd2 || x.a('<a>', 'link_other_parallel_app_static', 'easy_url_b.link_other_parallel_app_static'));
162 x.p(' <div.node>', hd2 || x.a('<a>', 'link_configured_url', 'easy_url_b.link_configured_url'));
163 x.p(' <div.node>', hd2 || x.a('<a>', 'use_base_url_for_static', 'easy_url_b.use_base_url_for_static'));
164 x.p(' <div.node>', hd2 || x.a('<a>', 'all patterns', 'easy_url_b.d'));
165 x.p(' <div.node>', hd2 || x.a('<a>', 'links in standalone procedure', './url_test1_b'));
166 x.p(' <div.node>', hd2 || x.a('<a>', 'param use t.ps and tmp.stv', 'easy_url_b.param_use_stv'));
167 x.p(' <div.node>', hd2 || x.a('<a>', 'param interpolate', 'easy_url_b.param_interpolate'));
168 x.p(' <div.node>', hd2 || x.a('<a>', 'param use vqstr', 'easy_url_b.param_use_vqstr'));
169 x.p(' <div.node>', hd2 || x.a('<a>', 'param tail', 'easy_url_b.param_tail'));
170 x.p(' <div.node>', hd2 || x.a('<a>', 'param interpolate&tail', 'easy_url_b.param_interpolate_tail'));
171 x.p(' <div.node>', hd2 || x.a('<a>', 'url relay', 'easy_url_b.url_relay'));
172 x.c('</div>');
173
174 x.p('<div.node>', hd1 || x.p('<b>', 'css related'));
175 x.o('<div.branch.collapse>');
176 x.p(' <div.node>', hd2 || x.a('<a>', 'component_css?link=Y', 'html_b.component_css?link=Y'));
177 x.p(' <div.node>', hd2 || x.a('<a>', 'component_css?link=N', 'html_b.component_css?link=N'));
178 x.p(' <div.node>', hd2 || x.a('<a>', 'css in HTML API(embeded or linked)', 'style_b.d'));
179 x.p(' <div.node>', hd2 || x.a('<a>', 'include component with local none-repeated css rule', 'local_css_b.d'));
180 x.c('</div>');
181
182 x.p('<div.node>', hd1 || x.p('<b>', 'HTML page layout/reorder'));
183 x.o('<div.branch.collapse>');
184 x.p(' <div.node>', hd2 || x.a('<a>', 'form V/H layouts', 'layout_b.form'));
185 x.p(' <div.node>', hd2 || x.a('<a>', 'reorder page components', 'layout_b.reorder'));
186 x.p(' <div.node>', hd2 || x.a('<a>', 'reorder style content to header', 'local_css_b.d?reorder=Y'));
187 x.p(' <div.node>', hd2 || x.a('<a>', 'use layout template', 'layout_b.use_layout'));
188 x.c('</div>');
189
190 x.c('</div>');
191 end;
192
193 -- advanced part
194 x.p('<div.node>', hd1 || x.p('<b>', 'servlet execution flow control'));
195 begin
196 x.o('<div.branch.collapse>');
197
198 x.p('<div.node>', hd1 || x.p('<b>', 'virtual host'));
199
200 x.p('<div.node>', hd1 || x.p('<b>', 'content negotiation'));
201 x.o('<div.branch.collapse>');
202 x.p(' <div.node>', hd2 || x.a('<a>', 'lang_versions', 'negotiation_b.languages_by_browser'));
203 x.p(' <div.node>', hd2 || x.a('<a>', 'accepts_best_match', 'negotiation_b.accepts_best_match'));
204 x.c('</div>');
205
206 x.p('<div.node>', hd1 || x.p('<b>', 'form post / feedback'));
207 x.o('<div.branch.collapse>');
208 x.p(' <div.node>', hd2 || x.a('<a>', 'user (un)register', 'user_b.register'));
209 x.c('</div>');
210
211 x.p('<div.node>', hd1 || x.p('<b>', 'error raise/catch/process'));
212 x.o('<div.branch.collapse>');
213 x.p(' <div.node>', hd2 || x.a('<a>', 'execute_with_error', 'error_b.execute_with_error'));
214 x.p(' <div.node>', hd2 || x.a('<a>', 'check_right', 'error_b.check_right'));
215 x.p(' <div.node>', hd2 || x.a('<a>', 'maybe_no_data', 'error_b.maybe_no_data'));
216 x.p(' <div.node>', hd2 || x.a('<a>', 'on_developing', 'error_b.on_developing'));
217 x.p(' <div.node>', hd2 || x.a('<a>', 'call_external', 'error_b.call_external'));
218 x.c('</div>');
219
220 x.p('<div.node>', hd1 || x.p('<b>', 'before/after filter'));
221 x.o('<div.branch.collapse>');
222 x.p(' <div.node>', hd2 || x.a('<a>', 'filter source', '=src_b.pack?p=k_filter'));
223 x.p(' <div.node>', hd2 || x.a('<a>', 'see_filter', 'filter_b.see_filter'));
224 x.c('</div>');
225
226 x.c('</div>');
227 end;
228
229 x.p('<div.node>', hd1 || x.p('<b>', 'session / authentication'));
230 begin
231 x.o('<div.branch.collapse>');
232
233 x.p('<div.node>', hd1 || x.p('<b>', 'session_b'));
234 x.o('<div.branch.collapse>');
235 x.p(' <div.node>', hd2 || x.a('<a>', 'session login', 'session_b.login_form'));
236 x.c('</div>');
237
238 x.p('<div.node>', hd1 || x.p('<b>', 'term_b'));
239 x.o('<div.branch.collapse>');
240 x.p(' <div.node>', hd2 || x.a('<a>', 'setting_form', 'term_b.setting_form'));
241 x.c('</div>');
242
243 x.p('<div.node>', hd1 || x.p('<b>', 'auth_b'));
244 x.o('<div.branch.collapse>');
245 x.p(' <div.node>', hd2 || x.a('<a>', 'basic', 'auth_b.basic'));
246 x.p(' <div.node>', hd2 || x.a('<a>', 'digest', 'auth_b.digest'));
247 x.p(' <div.node>', hd2 || x.a('<a>', 'cookie_gac', 'auth_b.cookie_gac'));
248 x.p(' <div.node>', hd2 || x.a('<a>', 'protected_page', 'auth_b.protected_page'));
249 x.p(' <div.node>', hd2 || x.a('<a>', 'basic_and_cookie', 'auth_b.basic_and_cookie'));
250 x.c('</div>');
251
252 x.c('</div>');
253 end;
254
255 x.p('<div.node>', hd1 || x.p('<b>', 'app modes'));
256 x.o('<div.branch.collapse>');
257 x.p(' <div.node>', hd2 || x.a('<a target=_blank>', 'view packages', 'po_content_b.packages'));
258 x.p(' <div.node>', hd2 || x.a('<a target=_blank>', 'bootstrap', 'bootstrap_b.packages'));
259 x.p(' <div.node>', hd2 || x.a('<a target=_blank>', 'frameset container', 'po_frameset_b.main'));
260 x.p(' <div.node>', hd2 || x.a('<a target=_blank>', 'iframe container', 'po_iframe_b.main'));
261 x.p(' <div.node>', hd2 || x.a('<a target=_blank>', 'ajaxload containver', 'po_ajaxload_b.main'));
262 x.c('</div>');
263
264 x.p('<div.node>', hd1 || x.p('<b>', 'oracle xml/json support'));
265 begin
266 x.o('<div.branch.collapse>');
267 x.p('<div.node>', hd1 || x.p('<b>', 'oracle xml'));
268 x.o('<div.branch.collapse>');
269 x.p(' <div.node>', hd2 || x.a('<a>', 'xmlgen_str', 'xml_page_b.xmlgen_str'));
270 x.p(' <div.node>', hd2 || x.a('<a>', 'xmlgen_cur', 'xml_page_b.xmlgen_cur'));
271 x.p(' <div.node>', hd2 || x.a('<a>', 'xmlgen_hier', 'xml_page_b.xmlgen_hier'));
272 x.p(' <div.node>', hd2 || x.a('<a>', 'sql_users', 'xml_page_b.sql_users'));
273 x.p(' <div.node>', hd2 || x.a('<a>', 'xml_users_css', 'xml_page_b.xml_users_css'));
274 x.p(' <div.node>', hd2 || x.a('<a>', 'xml_users_xsl_cli', 'xml_page_b.xml_users_xsl_cli'));
275 x.c('</div>');
276
277 x.p('<div.node>', hd1 || x.p('<b>', 'oracle json'));
278 x.c('</div>');
279 end;
280
281 x.p('<div.node>', hd1 || x.p('<b>', 'advanced SQL'));
282 begin
283 x.o('<div.branch.collapse>');
284 x.p('<div.node>', hd1 || x.p('<b>', 'reports'));
285 x.o('<div.branch.collapse>');
286 x.p(' <div.node>', hd2 || x.a('<a>', 'emp_managers(hierachical)', 'aggregation_b.emp_managers'));
287 x.p(' <div.node>', hd2 || x.a('<a>', 'emp_salaries(simple rollup)', 'aggregation_b.emp_salaries'));
288 x.p(' <div.node>', hd2 || x.a('<a>', 'emp_groups_list(complex rollup)', 'aggregation_b.emp_groups_list'));
289 x.p(' <div.node>', hd2 || x.a('<a>', 'job_dept_sals(cube)', 'aggregation_b.job_dept_sals'));
290 x.p(' <div.node>', hd2 || x.a('<a>', 'dept_job_sals(cube)', 'aggregation_b.dept_job_sals'));
291 x.c('</div>');
292 x.p('<div.node>', hd1 || x.p('<b>', 'analytic SQL'));
293 x.p('<div.node>', hd1 || x.p('<b>', 'datawarehouse SQL'));
294 x.p('<div.node>', hd1 || x.p('<b>', 'statictic SQL'));
295 x.p('<div.node>', hd1 || x.p('<b>', 'OLAP'));
296 x.c('</div>');
297 end;
298
299 x.p('<div.node>', hd1 || x.p('<b>', '3rd-party js/css lib integration'));
300 begin
301 x.o('<div.branch.collapse>');
302
303 x.p('<div.node>', hd1 || x.p('<b>', 'UI lib'));
304 x.o('<div.branch.collapse>');
305 x.p(' <div.node>', hd2 || x.a('<a>', 'bootstrap', 'bootstrap_b.packages'));
306 x.p(' <div.node>', hd2 || x.a('<a>', 'semantic UI', 'semantic_ui_b.d'));
307 x.p(' <div.node>', hd2 || x.a('<a>', 'purecss', 'purecss_b.d'));
308 x.p(' <div.node>', hd2 || x.a('<a>', 'jQuery ui', 'jquery_ui_b.d'));
309 x.p(' <div.node>', hd2 || x.a('<a>', 'jQuery mobile', 'jquery_mobile_b.d'));
310 x.c('</div>');
311
312 x.p('<div.node>', hd1 || x.p('<b>', 'chart'));
313 x.o('<div.branch.collapse>');
314 x.p(' <div.node>', hd1 || x.p('<b>', 'chart.js'));
315 x.o(' <div.branch.collapse>');
316 x.p(' <div.node>', hd2 || x.a('<a>', 'salary min/max by job_id', 'chart_b.salary_min_max_by_job_id'));
317 x.p(' <div.node>', hd2 || x.a('<a>', 'salary share by job_id', 'chart_b.salary_share_by_job_id'));
318 x.c(' </div>');
319 x.p(' <div.node>', hd2 || x.a('<a target=_blank>', 'd3', 'https://github.com/mbostock/d3/wiki/Gallery'));
320 x.p(' <div.node>', hd2 || x.a('<a target=_blank>', 'hcharts', 'http://www.hcharts.cn/'));
321 x.c('</div>');
322
323 x.p('<div.node>', hd1 || x.p('<b>', 'icons'));
324 x.o('<div.branch.collapse>');
325 x.p(' <div.node>', hd2 || x.a('<a>', 'material design icons', 'icon_b.material_design_icons'));
326 x.p(' <div.node>', hd2 || x.a('<a>', 'bootstrap_material_design', 'icon_b.bootstrap_material_design'));
327 x.p(' <div.node>', hd2 || x.a('<a>', 'ionicons', 'icon_b.ionicons'));
328 x.c('</div>');
329
330 x.p('<div.node>', hd1 || x.p('<b>', 'tables/grid/edit'));
331 x.o('<div.branch.collapse>');
332 x.p(' <div.node>', hd2 || x.a('<a>', 'x-editable', 'tables_h.xeditable'));
333 x.p(' <div.node>', hd2 || x.a('<a>', 'handsontable', 'tables_h.handsontable'));
334 x.p(' <div.node>', hd2 || x.a('<a>', 'datatables', 'tables_h.datatables'));
335 x.c('</div>');
336
337 x.c('</div>');
338 end;
339
340 x.p('<div.node>', hd1 || x.p('<b>', 'none functional'));
341 begin
342 x.o('<div.branch.collapse>');
343
344 x.p('<div.node>', hd1 || x.p('<b>', 'client/gateway cache'));
345 x.o('<div.branch.collapse>');
346 x.p(' <div.node>', hd2 || x.a('<a>', 'expires', 'cache_b.expires'));
347 x.p(' <div.node>', hd2 || x.a('<a>', 'last_modified', 'cache_b.last_modified'));
348 x.p(' <div.node>', hd2 || x.a('<a>', 'last_scn', 'cache_b.last_scn'));
349 x.p(' <div.node>', hd2 || x.a('<a>', 'etag_md5', 'cache_b.etag_md5'));
350 x.p(' <div.node>', hd2 || x.a('<a>', 'report_by_hour', 'cache_b.report_by_hour'));
351 x.c('</div>');
352
353 x.p('<div.node>', hd1 || x.p('<b>', 'proformance test'));
354 x.o('<div.branch.collapse>');
355 x.p(' <div.node>', hd2 || x.a('<a>', 'output any kb', 'basic_io_b.any_size?size=10'));
356 x.p(' <div.node>', hd2 || x.a('<a>', 'css_prof_b', 'css_prof_b.main'));
357 x.p(' <div.node>', hd2 || x.a('<a>', 'empty html', 'performance_b.empty_html'));
358 x.p(' <div.node>', hd2 || x.a('<a>', 'no PL/SQL', '/_about'));
359 x.c('</div>');
360 x.c('</div>');
361 end;
362
363 end;
364
365 procedure page is
366 begin
367 pc.h;
368 x.p('<p>', 'The left frame is entrance to all the test pages');
369 end;
370
371 end index_b;
372 /
Warning: Package Body created with compilation errors.
SQL>
SQL> prompt
SQL> prompt Creating package ORA_GOOD_B
Creating package ORA_GOOD_B
SQL> prompt ===========================
===========================
SQL> prompt
SQL> @@ora_good_b.spc
SQL> create or replace package ora_good_b is
2
3 procedure entry;
4
5 end ora_good_b;
6 /
Package created.
SQL> @@ora_good_b.bdy
SQL> create or replace package body ora_good_b is
2
3 procedure entry is
4 begin
5 x.t('<DOCTYPE html>');
6 x.o('<html>');
7 x.o('<head>');
8 x.o(' <style>');
9 b.line('dt{margin:0.5em;}');
10 b.line('dt:before{content:"[ "}');
11 b.line('dt:after{content:" ]"}');
12 b.line('dd{line-height:1.5em;}');
13 b.line('h3,h4{text-align:center;}');
14 x.c(' </style>');
15 x.c('</head>');
16 x.o('<body>');
17 x.p('<h3>', 'Using oracle pl/sql as application layer language has many goods');
18 x.p('<h4>', 'That can not be obtained for other none stored procesure languanges');
19 x.p('<h4>', 'And plsql