Slide 23
Slide 23 text
表に保存しているテンプレートを、これも表で保存しているSQLの実行結果で穴埋め
をするプロシージャを作成します。
このプロシージャを実行し、HTMLのテンプレートをSQLの実行結果で穴埋めし完全な
Webページを生成します。
Oracle APEXの基本的な仕組みです、一般的な呼び方をするとテンプレート・エンジン
といえるでしょう。
23
テンプレートとSQLを開発
HTMLDB – テーマ(テンプレートの集合)の導入 (2)
Copyright © 2023, Oracle and/or its affiliates
23
create or replace procedure prcemp2
as
r_tpl templates%rowtype;
r_sql emp%rowtype;
l_sql varchar2(80);
l_row varchar2(32767);
l_page varchar2(32767);
c sys_refcursor;
begin
select * into r_tpl from templates; -- テンプレートをメモリにロードする。
select "SQL" into l_sql from sql_source; -- 実行するSQLをメモリにロードする。
/* SQLの実行結果でテンプレートの穴埋めを行う。l_contentがページになる。 */
l_row := replace(r_tpl."ROW", '#ROW#', r_tpl."HEADER"); -- 行テンプレートをヘッダー行で置き換える。
l_page := l_page || l_row; -- 出力に追加する。
open c for l_sql; -- SQLを実行する。
loop
fetch c into r_sql;
exit when c%notfound;
l_row := r_tpl."DATA"; -- データ行のテンプレートを選択する。
l_row := replace(l_row, '#EMPNO#', r_sql.empno); -- 従業員番号を置き換える。
l_row := replace(l_row, '#ENAME#', r_sql.ename); -- 従業員名を置き換える。
l_row := replace(r_tpl."ROW",'#ROW#', l_row); -- 行テンプレートをデータ行で置き換える。
l_page := l_page || l_row; -- 出力に追加する。
end loop;
close c;
l_page := replace(r_tpl."TABLE", '#TABLE#', l_page); -- 表テンプレートをヘッダーとデータで置き換える
l_page := replace(r_tpl."BODY", '#BODY#', l_page); -- 本文テンプレートを表で置き換える
l_page := replace(r_tpl."HTML", '#HTML#', l_page); -- HTMLテンプレートを本文で置き換える
/* 以上でページが完成した。クライアントへ送信する。 */
owa_util.mime_header('text/html',true,'utf-8');
htp.prn(l_page);
end prcemp2;