ITスキル

【OracleXE】カレンダーマスタを作成する。Webアプリで。

PL/SQLを使って、簡単なプログラムを作ってみようと思います。
カレンダーデータの作成を行うプログラムです。

カレンダーマスタの必要性

Oracleって、日付を扱う関数は色々あるのですけど、カレンダーのように日付を羅列して表示する仕組みがないんです。(知らないだけだったらごめんなさい!)

副問い合わせやVIEWで代用することも可能ですが、日付に付随情報を持たせるなどの拡張性を考えると、マスターテーブルとして用意してしまった方がよいと私は思います。

CALENDAR_MASTERテーブルの作成

そんなわけで、まずは日付格納用のテーブルをひとつ作ります。sqlplusを起動して以下のDDLを実行してください。
「表が作成されました。」と表示されれば成功です。

テーブル:CALENDAR_MASTER

列名 説明
YMD VARCHAR2(8) 主キー。YYYYMMDD形式の日付文字列。
SEQ_NO NUMBER(4,0) 連番

最初のYMDが、このテーブルの主キーであり、日付です。次のSEQ_NOが、日付の前後関係を示す値です。

SQL> SELECT COUNT(*) FROM CALENDAR_MASTER;

COUNT(*)
----------
0

まだテーブルの中は空っぽです。

データ登録プロシージャ(ダミー)の作成

んでは、試しに画面を介さないPLSQLプロシージャを一個作ってみましょう。

これをコンパイルします。
コンパイルができたら、次はこのプロシージャを実行。

SQL> CALL PR_CALENDAR();

コールが完了しました。

先程作ったテーブルをSELECTしてみてください。
本日と30日後までの日付が、順番に並んで表示されているかと思います。

SQL> SELECT * FROM CALENDAR_MASTER;

YMD SEQ_NO
---------------- ----------
20190907 1
20190908 2
20190909 3

・・中略・・

20191005 29
20191006 30
20191007 31

31行が選択されました。

次は、このへんを画面から操作できるようにしてみましょう。
PR_CALENDARプロシージャはもう使いませんのでドロップして構いません。

SQL> DROP PROCEDURE PR_CALENDAR;

プロシージャが削除されました。

ブラウザで動くPLSQLプログラム

ここからはWebサービスを使って動く仕組みを作ります。

このプロシージャをコンパイルしてください。
エラーがなければ、Webブラウザを立ち上げて、URLに
http://IPアドレス:8080/DAD_WEB_SERVICE/WEB_CALENDAR
と入力してください。表示されるダイアログには、ユーザー名とパスワードを入力します。

こんな画面が表示されましたでしょうか。「日付登録」ボタンを押すと…
何も起こりません。そう書いているので。まずは、Webページが表示されればOK。
では、一気にすっ飛ばして動くカタチのものにします。

WEB_CALENDARプロシージャ

上記コンパイル後に再度Webページにアクセスすると、以下のような表示になっていると思います。

開始日付「20190101」、終了日付を「20191231」にしてボタンを押すと…

こんな感じに表示されます。
テーブルをSELECTしてみると、ちゃんと1年分のレコード(365件)が登録されていることがわかります。

SQL> SELECT * FROM CALENDAR_MASTER;

YMD SEQ_NO
---------------- ----------
20190101 1
20190102 2
20190103 3
20190104 4

・・中略・・

20191230 364
20191231 365

365行が選択されました。

まとめ

日付マスタを用意しておくと、各種問い合わせの基幹テーブルとして使えて色々便利です。
ブラウザで動かす意味は、実はあまりないのですけどね…

Webアプリの使用例を書きたかったので、無理やり題材にしてしまいました。

上記プロシージャは、レコードの一括作成(DELETE~INSERT)としていますが、定期的に追加していくような仕組みの方が実務には適しているかもしれませんね。

COMMENT

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください