【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