UNPKG

noradle-demo

Version:
1,912 lines (1,164 loc) 361 kB
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