PL/SQL문 질문입니다.. 0 12 2,475

by 여비몬 [2013.02.18 08:48:59]


안녕하세요
좋은아침입니다!

다름이아니라 여쭤볼게있습니다..
PL/SQL문으로
은행에서쓰는것처럼
1,000,000 숫자가 이렇게있다면
일백만원
10,000,000
일천만원

이런식으로 뜨게하고싶습니다..
PL/SQL문으로 하려는데 너무 어렵네요ㅠㅠ
테이블에 있는 값들을 뜨게하려고합니다..
가르침을주시면 감사하겠습니다.
아..그리고 프로시저는 권한이 없어서 생성하지못합니다..ㅠㅠ

by 까망소 [2013.02.18 08:55:03]

마농님의 강의가 있습니다. ^^*

"[퀴즈] 숫자를 한글로 표기"
http://www.gurubee.net/article/49942


by 여비몬 [2013.02.18 09:42:02]

PL/SQL문으로 하려고하는데 IF문을 써서하려니까 제 머리가돌아가질않네요ㅠㅠ

by 마농 [2013.02.18 10:40:53]

프로시져 생성 권한도 없는데, 왜 굳이 PL/SQL문으로 하려고 하시는지요?
SQL 로 해서 안되는 이유라도 있는지?


by 여비몬 [2013.02.18 10:44:52]

넵..개인적인 사정이있네요 ..


by 마농 [2013.02.18 10:54:54]

말씀하시는 PL/SQL 이라는게 뭔가요?
어떤 생각을 가지고 질문을 하신건지요?
프로시져는 아닐테고... 함수로 만드실 생각이신지요?
함수 생성 권한은 있으신지요?


by 여비몬 [2013.02.18 11:07:22]

아니요..
제가 초짜라그런데 DECLARE, BEGIN, END 이걸로만 결과값을 볼수는 없는건가요?

by 마농 [2013.02.18 11:41:16]

커서를 선언하고
해당 커서를 루프돌려가며
dbms_output 을 이용해 쿼리 결과를 출력할수는 있습니다.
이럴거면 차라리 SQL 실행해서 결과보는게 나을수도 있습니다.


by 여비몬 [2013.02.18 11:57:11]

네! 그걸하려고하고있습니다! 열심히 시도해보고있는데 결과가 잘안나오네요..
과제 비슷한거라 꼭 PL/SQL문으로 해야하거든요..흑


by 마농 [2013.02.18 12:31:31]
DECLARE
CURSOR c1 IS
WITH t AS
(
SELECT 12345678 amt FROM dual
UNION ALL SELECT 1234567890 amt FROM dual
)
SELECT TRANSLATE
     ( SUBSTR(v, 1,1)||DECODE(SUBSTR(v, 1,1),0,'','천')
    || SUBSTR(v, 2,1)||DECODE(SUBSTR(v, 2,1),0,'','백')
    || SUBSTR(v, 3,1)||DECODE(SUBSTR(v, 3,1),0,'','십')
    || SUBSTR(v, 4,1)||DECODE(SUBSTR(v, 1,4),0,'','조')
    || SUBSTR(v, 5,1)||DECODE(SUBSTR(v, 5,1),0,'','천')
    || SUBSTR(v, 6,1)||DECODE(SUBSTR(v, 6,1),0,'','백')
    || SUBSTR(v, 7,1)||DECODE(SUBSTR(v, 7,1),0,'','십')
    || SUBSTR(v, 8,1)||DECODE(SUBSTR(v, 5,4),0,'','억')
    || SUBSTR(v, 9,1)||DECODE(SUBSTR(v, 9,1),0,'','천')
    || SUBSTR(v,10,1)||DECODE(SUBSTR(v,10,1),0,'','백')
    || SUBSTR(v,11,1)||DECODE(SUBSTR(v,11,1),0,'','십')
    || SUBSTR(v,12,1)||DECODE(SUBSTR(v, 9,4),0,'','만')
    || SUBSTR(v,13,1)||DECODE(SUBSTR(v,13,1),0,'','천')
    || SUBSTR(v,14,1)||DECODE(SUBSTR(v,14,1),0,'','백')
    || SUBSTR(v,15,1)||DECODE(SUBSTR(v,15,1),0,'','십')
    || SUBSTR(v,16,1)
     , '1234567890', '일이삼사오육칠팔구') || '원' v
  FROM (SELECT LPAD(amt, 16, '0') v FROM t)
;
BEGIN
    FOR c IN c1
    LOOP
        dbms_output.put_line(c.v);
    END LOOP;
END;
/

by 여비몬 [2013.02.18 12:52:54]

감사합니다 마농님^^

by 마농 [2013.02.18 13:22:59]
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_amt VARCHAR2(20);
v_tmp VARCHAR2(4);
v_rtn VARCHAR2(100);
BEGIN
    FOR c IN c1
    LOOP
        v_rtn := '';
        v_amt := LPAD(c.amt, 20, '0');
        FOR i IN 1..5
        LOOP
            v_tmp := SUBSTR(v_amt, i*4-3, 4);
            IF v_tmp != '0000' THEN
                FOR j IN 1..4
                LOOP
                    IF SUBSTR(v_tmp, j, 1) != '0' THEN
                        v_rtn := v_rtn || SUBSTR(v_tmp, j, 1) || SUBSTR('천백십', j, 1);
                    END IF;
                END LOOP;
                v_rtn := v_rtn || SUBSTR('경조억만', i, 1);
            END IF;
        END LOOP;
        v_rtn := TRANSLATE(v_rtn, '1234567890', '일이삼사오육칠팔구');
        v_rtn := NVL(v_rtn, '영') || '원';
        dbms_output.put_line(v_rtn);
    END LOOP;
END;
/

by 여비몬 [2013.02.18 16:22:24]
항상 많은도움 감사합니다 마농님!
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입