pl/sql입니다..하하.. 0 4 2,485

by 여비몬 [2013.02.23 09:34:51]



먼저 마농님이 알려주신 PL/SQL쿼리 너무잘되서 도움이 많이되었습니다. 감사합니다~
지겨우시겠지만..
다른방식으로 하다가 막혀서 여쭤보러왔습니다..
엉망일수도있지만 이쁘게봐주세요..
저번처럼 숫자를 한글로 바꾸는 쿼리입니다

DECLARE
CURSOR CUR IS
WITH T AS
(
SELECT 123123123 AMT FROM DUAL
UNION ALL SELECT 1234567890 AMT FROM DUAL
)
SELECT *
FROM T;

LEN NUMBER;
RTM VARCHAR2(100) := '' ; -- 결과값
APP VARCHAR2(50) := '123123123' ;
A2 NUMBER;
CH VARCHAR2(50) := '일이삼사오육칠팔구'; 지금은 하드코딩으로해놨는데 위에있는 커서를 어떻게 가져올까요...?
그리고 CH적용방법을 모르겠어요ㅠㅠ
I NUMBER;
MODD NUMBER;
LEAN BOOLEAN;
BEGIN
A2 := LENGTH(APP);
FOR I IN REVERSE 1..A2 LOOP



IF TO_NUMBER(APP) <> 0 THEN
RTM := RTM || SUBSTR(CH, TO_NUMBER(APP), 1);
MODD := MOD (I, 4);

IF MODD = 0 THEN RTM := RTM || '천'; END IF;
IF MODD = 3 THEN RTM := RTM || '백'; END IF;
IF MODD = 2 THEN RTM := RTM || '십'; END IF;

LEAN := TRUE;
END IF;


IF LEAN THEN
IF I = 17 THEN RTM := RTM || '경';
LEAN := FALSE;
END IF;
IF I = 13 THEN RTM := RTM || '조';
LEAN := FALSE;
END IF;
IF I = 9 THEN RTM := RTM || '억';
LEAN := FALSE;
END IF;
IF I = 5 THEN RTM := RTM || '만';
LEAN := FALSE;
END IF;
END IF;
DBMS_OUTPUT.PUT_LINE(TO_CHAR(I) || '-' ||RTM || '원');

END LOOP;
END;


전 언제쯤 정상적인 결과가 나오는 쿼리를 짤수있을까요ㅠㅠ
또 잘못된 부분이있다면 지적을해주시면 감사하겠습니다(_ _)
by Oracler [2013.02.24 10:10:26]
아래 링크를 시작으로 PL/SQL 강좌 중 CURSOR에 관한 내용을 일단 공부하시는 것이 어떨까요?

http://www.gurubee.net/lecture/1064

by 여비몬 [2013.02.25 08:54:11]

해결했답니다 하하

by 마농 [2013.02.25 09:03:11]

공유하시죠.
개선사항 있는지 봐드리겠습니다.


by 마농 [2013.02.25 13:43:57]
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;
/
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입