こんにちは!データベースの世界へようこそ。
今日は、少しレトロでありながら、現在でも基幹系システムの裏側でぶいぶい言わせている「階層型DBMS(データベース管理システム)」、そしてその心臓部である「DL/I(ディー・エル・アイ)のステータスコード」についてお話ししますね。
「階層型?なにそれ難しそう……」と思ったそこのあなた、安心してください。
今回は専門用語のジャングルをバッサバッサと切り払い、誰でもスッと腑に落ちる例え話を使って、この世界を一緒に探検していきます。
ここをクリアすれば、階層型DBMSの基本はバッチリマスターできますよ!それでは、温かいコーヒーでも飲みながら、リラックスして聞いてください。
—
1. そもそも「階層型DBMS」ってどんな世界?
現代のデータベース(リレーショナル型)は、エクセル表のようにデータを縦横のマス目で管理しますよね。でも、階層型DBMSはそうじゃありません。
イメージしてください。それは「家系図」や「会社の組織図」そのものです。
例えば、「会社」という一番上の親(ルート)がいて、その下に「部署」という子供がぶら下がり、さらにその下に「社員」という孫がぶら下がっています。
データが親から子、子から孫へと、一本の木の枝のように繋がっているのが階層型データ構造の特徴です。
2. データを取りに行く呪文:DL/I(ディー・エル・アイ)
この家系図のようなデータベースから、「おい、〇〇さんのデータを持ってこい!」と命令するための専用の言葉(言語)があります。それが DL/I(Data Language/I) です。
プログラムを書くエンジニアは、このDL/Iという呪文を使ってデータベースに話しかけます。
「親の〇〇を開いて、その最初の子どもをちょうだい!」という具合ですね。
しかし、世の中、思い通りにいかないことも多いですよね。
「そんな名前の子ども、いませんけど?」とか「データベースの鍵が閉まってます!」なんてエラーが起きることもあります。
そこで登場するのが、今回の主役である「ステータスコード(戻り値)」です。
—
3. ステータスコードとは?(コンビニのレジの画面に似ている話)
あなたがコンビニで買い物をして、レジにお金を払ったとします。
レジの画面に「ピッ!」と音がして、何も文字が出なければ「あ、お会計が終わったんだな(正常)」と分かりますよね。
でも、「10円足りません」とか「バーコードが読み取れませんでした」とエラーメッセージが出れば、それに応じた対応をします。
DL/Iのステータスコードも全く同じです。
データベースに「このデータちょうだい!」とお願いしたあと、データベース側が「結果はどうだったか」をこっそり教えてくれる2文字の暗号(コード)、それがステータスコードです。
プログラムは、この2文字をチラッと確認してから、「やった!データが取れたぞ」「おっと、エラーだ!」と次の動きを決めるわけです。
—
4. 知っておくべき代表的なステータスコードたち
実務でよく見かける代表的なステータスコードを、日常のたとえ話と一緒に見ていきましょう。
① 空白(スペース / ` `)
- 意味: 正常終了(大成功!)
- たとえ話: 「はい、お探しの商品、在庫ありましたよ!」と、笑顔でレジ袋に入れて渡してくれた状態です。エラーなし。エンジニアにとって一番ホッとする瞬間です。
② GE (Not Found / 見つからない)
- 意味: 指定したデータが存在しない
- たとえ話: 図書館で「『火星人のためのプログラミング入門』の本をください」と司書さんに頼んだら、「あ、そんな本この世にありませんね」と言われた状態です。プログラム的には「お探しのデータはありませんでした」というルートに分岐させます。
③ GP (End of Chain / これ以上データがない)
- 意味: 同じグループのデータがもうおしまい
- たとえ話: バケツリレーで「次、次のミカンちょうだい!」と順番に受け取っていって、いよいよバケツの底が見え、「もうミカンは一粒も残っていません!」となった状態です。ループ処理を終わらせる合図になります。
④ II (Duplicate / 重複エラー)
- 意味: すでに同じデータが存在するのに、新しく作ろうとした
- たとえ話: すでに自分の名前で登録されている会員証を、もう一回「新しく作ってください!」とレジに出したら、「お客さま、すでにそのカードはお持ちです」と怒られた状態です。
—
5. 実際の判定ロジックを覗いてみよう
さて、プログラムの中でこのステータスコードをどう扱っているのか、雰囲気を見てみましょう。(特定のプログラミング言語に依存しない、シンプルな疑似コードで書きますね)
// 1. データベースに「この社員のデータください」とお願いする(DL/I呼び出し)
CALL ‘CBLTDLI’ USING GU, Employee_Segment, Search_Criteria.
// 2. データベースから返ってきた「ステータスコード」を確認する
IF Status_Code == ” ” (空白) THEN
// 【大成功】
// やったね!データの取得に成功したので、画面に名前を表示しよう
PRINT Employee_Name
ELSE IF Status_Code == “GE” THEN
// 【データなし】
// 「おっと、そんな社員は登録されていません」と優しく教えてあげよう
PRINT “指定された社員は見つかりませんでした。”
ELSE
// 【その他のエラー】
// 予期せぬトラブル!慌てず騒がず、システム管理者に連絡だ!
PRINT “システムエラーが発生しました。コード: ” + Status_Code
PERFORM Emergency_Routine
END-IF
ね?やっていることは非常にシンプルでしょう?
「お願いする ➔ 結果の2文字を見る ➔ 2文字の内容によって分岐する」
基本はこの3ステップの繰り返しです。
—
6. 先輩からのメッセージ
階層型DBMSの世界は、一見すると古めかしく、ルールが厳格で息が詰まるように思えるかもしれません。リレーショナルデータベースのように「とりあえずSQLを適当に投げたらなんとかなった」というごまかしが効かない世界です。
しかし、その分、データの流れが一本の木のように美しく整理されており、ステータスコードという「データベースからの正直な声」にしっかり耳を傾けてあげれば、裏切ることはありません。
今回学んだステータスコードの判定(「うまくいったかな?」「データはあったかな?」と確認するクセ)は、階層型DBMSだけでなく、これからのエンジニア人生で出会うあらゆるAPIやファイル操作の基礎になります。
ここをクリアしたあなたなら、もう胸を張って「階層型DBMSの基本はバッチリです!」と言って大丈夫ですよ。
基幹システムのカッコいいアーキテクトへの第一歩、おめでとうございます!
コメント