🦾

【PL/SQL】htp(メモ)

2024/09/15に公開

oracleのhtpパッケージとhtpプロシージャについてメモします。

htpパッケージ

htpパッケージは、PL/SQLプロシージャとファンクションの集合体です。
HTMLタグを生成するためのツールを提供し、Webアプリケーションの開発が行えます。

htpプロシージャ

htpパッケージ内に含まれる個々のプロシージャです。
特定のHTMLタグやテキストを生成するために使用します。

htpプロシージャ使用例

htp.pプロシージャの場合

htp.pプロシージャは、指定された文字列をHTML出力として生成します。
PL/SQLコード内で動的に生成されたコンテンツをHTMLとして出力するためにも使用します。

使い方

htp.p('');のシングルクォートの間にHTMLの記述をすれば文字列として出力されます。
動的に使用する場合は細かく分け作成します。

例:1~5までの行を持つ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では&quot;
    エスケープすることが一般的です。
  • アンパサンド
    HTMLでは&&amp;とエスケープします。

その他の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プロシージャを使用していることを目にするようになりました。
これを機に他のプロシージャを使用して、他の人が見た際に伝わりやすい記述ができるようにしていきます◎

参考

https://docs.oracle.com/cd/B14099_19/web.1012/b15896/pshtp.htm

Discussion