Oracle SQL 関数 : LPAD, RPAD : 文字列の前後処理

 strRet := LPAD( strSrc , n [, strPad ] );
 strRet := RPAD( strSrc , n [, strPad ] );

 LPAD及びRPADは文字列データ strSrc を左側(右側に)連続してstrPadを埋めてn桁分の文字列を返します。
  strPad はデフォルトで空白文字。
SQL> SELECT
  2   '<' || LPAD('ABC',10)              || '>' AS LPAD1
  3  ,'<' || LPAD('ABC',10,'*')          || '>' AS LPAD2
  4  ,'<' || LPAD('ABC',10,'*+')         || '>' AS LPAD3
  5  ,'<' || LPAD('ABC',10,'1234567890') || '>' AS LPAD4
  6  ,'<' || RPAD('ABC',10)              || '>' AS RPAD1
  7  ,'<' || RPAD('ABC',10,'*')          || '>' AS RPAD2
  8  ,'<' || RPAD('ABC',10,'*+')         || '>' AS RPAD3
  9  ,'<' || RPAD('ABC',10,'1234567890') || '>' AS RPAD4
 10  FROM DUAL;

LPAD1        LPAD2        LPAD3        LPAD4        RPAD1        RPAD2        RPAD3        RPAD4
------------ ------------ ------------ ------------ ------------ ------------ ------------ ------------
<       ABC> <*******ABC> <*+*+*+*ABC> <1234567ABC> <ABC       > <ABC*******> <ABC*+*+*+*> <ABC1234567>


ところでこの LPADRPAD 関数を使って、指定文字を指定桁数分の文字列(連続文字列)として生成できます。
以下にその例を示します。[strSrc]と[strPad]に同じ文字を指定し、桁数には必要となる数値を指定します。

SQL> SELECT
  2      RPAD('9', 10, '9') AS "RPAD:10桁表示"
  3     ,LPAD('9', 10, '9') AS "LPAD:10桁表示"
  4  FROM DUAL;

RPAD:10桁表示        LPAD:10桁表示
-------------------- --------------------
9999999999           9999999999


この処理を関数化してみましたので、以下に示します。

SQL> CREATE OR REPLACE FUNCTION CHAR_REPEAT (
  2      InChar      IN  VARCHAR2
  3     ,InUnit      IN	 NUMBER
  4  )
  5  RETURN VARCHAR2
  6  IS
  7      UnitWk  NUMBER;
  8  BEGIN
  9      UnitWk := InUnit;
 10      IF UnitWk <= 1 THEN
 11          UnitWk := 1;
 12      END IF;
 13      RETURN  LPAD(InChar, UnitWk, InChar);
 14  END;
 15  /

ファンクションが作成されました。

SQL> SELECT
  2      CHAR_REPEAT('A', 0) || ' / ' ||
  3      CHAR_REPEAT('0', 5) || ' / ' ||
  4      CHAR_REPEAT('9', 9)
  5  FROM DUAL;

CHAR_REPEAT('A',0)||'/'||CHAR_REPEAT('0',5)||'/'||CHAR_REPEAT('9',9)
--------------------------------------------------------------------------------
A / 00000 / 999999999