【入門編】 ステータスコード(DL/I戻り値) – 階層型DBMS

こんにちは!データベースの世界へようこそ。
今日は、少しレトロでありながら、現在でも基幹系システムの裏側でぶいぶい言わせている「階層型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の基本はバッチリです!」と言って大丈夫ですよ。
基幹システムのカッコいいアーキテクトへの第一歩、おめでとうございます!

コメント

タイトルとURLをコピーしました