공유하시죠.
개선사항 있는지 봐드리겠습니다.
DECLARE
CURSOR c1 IS
WITH t AS
(
SELECT 12345678 amt FROM dual
UNION ALL SELECT 1234567890 amt FROM dual
UNION ALL SELECT 12345678901234567890 amt FROM dual
UNION ALL SELECT 0 amt FROM dual
)
SELECT * FROM t
;
v_rtn VARCHAR2(100 CHAR);
n0 NUMBER(2);
n1 NUMBER(1);
n2 NUMBER(1);
n3 NUMBER(2);
v0 VARCHAR2(48);
v1 VARCHAR2(9 CHAR) := '일이삼사오육칠팔구';
v2 VARCHAR2(3 CHAR) := '천백십';
v3 VARCHAR2(12 CHAR) := '만억조경해자양구간정재극';
BEGIN
FOR c IN c1
LOOP
n0 := CEIL(LENGTH(c.amt) / 4) * 4;
v0 := LPAD(c.amt, n0, '0');
v_rtn := '';
FOR i IN 1..n0
LOOP
n1 := SUBSTR(v0, i, 1);
n2 := MOD(i - 1, 4)+1;
n3 := CEIL((n0 - i + 1) / 4) - 1;
IF n1 != 0 THEN
v_rtn := v_rtn || SUBSTR(v1, n1, 1);
v_rtn := v_rtn || SUBSTR(v2, n2, 1);
END IF;
IF n2 = 4 AND n3 != 0 AND SUBSTR(v0, i-3, 4) != 0 THEN
v_rtn := v_rtn || SUBSTR(v3, n3, 1);
END IF;
END LOOP;
v_rtn := NVL(v_rtn, '영') || '원';
dbms_output.put_line(v_rtn);
END LOOP;
END;
/