チャーリーのC

技術系の記録をしていきます。

PL/SQLで電話番号をハイフン区切りで格納する

  • 編集中-

現在PL/SQLの勉強をしているのでメモ

今回は電話番号をハイフンで区切り、
市外局番、市内局番、局番
の3つに分けて配列に格納するコードを書きました。
(電話番号がxx-xxxx-xxxxの形式のもの以外は異常とみなし、先頭6桁と7桁〜11桁で分けたものを格納しています)

※変数の宣言などは省略されてます
使用している変数の説明
pTelNum -- 電話番号を格納
hCnt -- ハイフンをカウント
pNum -- 電話番号一文字を格納する変数
  arrayNum -- 配列の場所
  checkFlag -- 配列の中身のチェック (1→true 0→false


pTelNum := REC.AHI1_TN; -- 電話番号を格納
-- 電話番号がNULLの場合各配列にNULLを格納する
IF pTelNum IS NULL THEN
ca(1) := NULL;
ca(2) := NULL;
ca(3) := NULL;
ELSE
--電話番号をハイフン区切りで配列へ格納
FOR i IN 1..LENGTH(pTelNum) LOOP
pNum := SUBSTR(pTelNum, i, 1);
IF pNum = '-' THEN
hCnt := hCnt + 1;
IF arrayNum >= 3 THEN
IF pNum = '-' THEN
CONTINUE;
ELSE
ca(3) := (ca(3) || pNum);
END IF;
ELSE
arrayNum := arrayNum + 1;
END IF;
ELSE
ca(arrayNum) := (ca(arrayNum) || pNum);
END IF;
END LOOP;

--配列の中身をチェック
IF ca(1) IS NOT NULL AND ca(2) IS NOT NULL AND ca(3) IS NOT NULL AND hCnt = 2 THEN
checkFlag := 1;
ELSE
checkFlag := 0;
END IF;

--チェックでNGだった場合、整形して値を配列へ格納
IF checkFlag = 0 OR (checkFlag = 1 AND LENGTH(ca(1)) > 6
OR LENGTH(ca(2)) > 4 OR LENGTH(ca(3)) > 4) THEN
telNum := REPLACE(pTelNum, '-', '');
ca(1) := SUBSTR(telNum, 1, 6, '');
ca(2) := SUBSTR(telNum, 7, 4, '');
ca(3) := NULL;


大まかな流れとして、


1. とってきた電話番号がNULLじゃない確認
  NULLの場合は配列全てにNULLをいれる


2. 電話番号を一文字ずつ配列に格納
  ハイフンが来た場合には、飛ばして次回からは二番目の配列に電話番号を格納する

3. 配列にハイフンを抜いた3塊の電話番号が入ったら終了


4.

説明など随時更新します