【PL/SQL】htp(メモ)
oracleのhtpパッケージとhtpプロシージャについてメモします。
htpパッケージ
htpパッケージは、PL/SQLプロシージャとファンクションの集合体です。
HTMLタグを生成するためのツールを提供し、Webアプリケーションの開発が行えます。
htpプロシージャ
htpパッケージ内に含まれる個々のプロシージャです。
特定のHTMLタグやテキストを生成するために使用します。
htpプロシージャ使用例
htp.pプロシージャの場合
htp.pプロシージャは、指定された文字列をHTML出力として生成します。
PL/SQLコード内で動的に生成されたコンテンツをHTMLとして出力するためにも使用します。
使い方
htp.p('');のシングルクォートの間にHTMLの記述をすれば文字列として出力されます。
動的に使用する場合は細かく分け作成します。
BEGIN
:
htp.p('<table border="1">');
FOR i IN 1..5 LOOP
htp.p('<tr><td>Row ' || i || '</td></tr>');
END LOOP;
htp.p('</table>');
:
END;
上記例では、1から5までの行を持つHTMLテーブルが生成されます。
-
htp.p('<table border="1">');
<table>タグを生成し、ボーダー付きのテーブルの開始を示します。 -
htp.p('</table>');
</table>タグを生成し、テーブルの終了を示します。
上記例のループ行の作成について
FOR i IN 1..5 LOOP
htp.p('<tr><td>Row ' || i || '</td></tr>');
END LOOP;
上記例の'|| i ||'は、PL/SQLで文字列を連結するために使用されます。
||演算子を使って文字列と変数を結合します。
-
'Row '
固定の文字列です。 -
i
ループ変数で、数値が入ります。 -
||
連結演算子で、左側と右側の文字列を結合します。
上記方法で文字列と変数を連結できます。
特殊文字のエスケープ
連結する文字列に特殊文字(例:シングルクォート)が含まれる場合、エスケープする必要があります。
例:
BEGIN
FOR i IN 1..5 LOOP
HTP.P('Row ' || i || ' - It''s test');
END LOOP;
END;
It''sの部分でシングルクォートを2つ連続して書くことで、シングルクォートをエスケープしています。
その他の特殊文字
-
ダブルクォート
ダブルクォートを含む文字列は、通常の文字列として扱われますが、HTMLでは"と
エスケープすることが一般的です。 -
アンパサンド
HTMLでは&を&とエスケープします。
その他のhtpプロシージャ
htp.p以外にも様々なHTMLを生成する多くのプロシージャがあります。
以下は抜粋した主要なプロシージャです。
HTML、HEAD、BODYタグ
-
htp.htmlopen: <HTML>タグを生成 -
htp.htmlclose: </HTML>タグを生成 -
htp.headopen: <HEAD>タグを生成 -
htp.headclose: </HEAD>タグを生成 -
htp.bodyopen: <BODY>タグを生成 -
htp.bodyclose: </BODY>タグを生成
HEADエリアのタグ
-
htp.title: <TITLE>タグを生成 -
htp.meta: <META>タグを生成 -
htp.script: <SCRIPT>タグを生成 -
htp.style: <STYLE>タグを生成
フォームタグ
-
htp.formopen: <FORM>タグを生成 -
htp.formclose: </FORM>タグを生成 -
htp.formcheckbox: <INPUT TYPE="CHECKBOX">タグを生成 -
htp.formhidden: <INPUT TYPE="HIDDEN">タグを生成 -
htp.formimage: <INPUT TYPE="IMAGE">タグを生成 -
htp.formpassword: <INPUT TYPE="PASSWORD">タグを生成 -
htp.formradio: <INPUT TYPE="RADIO">タグを生成 -
htp.formselectopen: <SELECT>タグを生成 -
htp.formselectclose: </SELECT>タグを生成
所感
転職後に職場で、自身が作成したパッケージでは例に出したhtp.pプロシージャに依存していました。
最近は、他の人が作成したパッケージに機能追加の記述を追記する機会が増え、上記で紹介したような様々なhtpプロシージャを使用していることを目にするようになりました。
これを機に他のプロシージャを使用して、他の人が見た際に伝わりやすい記述ができるようにしていきます◎
参考
Discussion