database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
ㆍOracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
Oracle Q&A 40068 게시물 읽기
No. 40068
RE) 코드변환 도움요청
작성자
김동길(sw1893)
작성일
2013-03-20 16:17
조회수
5,670

REPLACE 할려고 FUNCTION 을 하나 만들었습니다

입력받는 변수값이 메모같은거라....특정 코드값이 들어있는것만 바꿔야 하거든요..

W_JONG 이테이블에는 ASISCD , TOBECD 컬럼이 두개이구요..

WHERE 절을 줄수도없고...음...

Select Into 절에서 Too Many Rows 에러가 나서 결과값이 NULL로 나오네요...

어떻게 처리를 해야 할지....

================================

입력값

순번 메모

1 직장:051-634-xxxx 24566324

2 785203146 직장:031-722-xxxx

================================

결과값

순번 메모

1 직장:051-634-xxxx 111111111111

2 2222222222 직장:031-722-xxxx

================================

코드테이블에는 이런식으로 들어가있습니다

ASISCD와 동일한 값이 있으면 TOBECD로 변경을 해야 하는거라서요..

ASISCD TOBECD

24566324 11111111111

785203146 2222222222

75123495 3333333333

==============================

CREATE OR REPLACE FUNCTION FN_MIG_W_JONG(iColNM IN VARCHAR2 DEFAULT NULL)
RETURN VARCHAR2
IS

v_sq VARCHAR2(1000);
BEGIN
SELECT REPLACE(iColNM,ASISCD,TOBECD) AS tobe INTO v_sq FROM W_JONG
RETURN v_sq;

EXCEPTION
WHEN NO_DATA_FOUND THEN
RETURN iColNM;

WHEN OTHERS THEN
RETURN v_sq;
END;

이 글에 대한 댓글이 총 4건 있습니다.

-- 1:1 매칭된다면 Where 절만 추가해 주시면 되겠네요.
SELECT REPLACE(iColNM, asiscd, tobecd) AS tobe
  INTO v_sq
  FROM w_jong
 WHERE iColNM LIKE '%' || asiscd || '%'
;


그런데 혹시 1:M 관계로 매칭되는 경우도 있나요?
- 입력 : 1 직장:051-634-xxxx 24566324, 785203146 직장:031-722-xxxx
- 출력 : 1 직장:051-634-xxxx 11111111111, 2222222222 직장:031-722-xxxx
있다면 LOOP 를 돌려야 합니다.

마농(manon94)님이 2013-03-20 16:26에 작성한 댓글입니다.
이 댓글은 2013-03-20 16:29에 마지막으로 수정되었습니다.

네 마농님이 말씀하신 그런값들도 존재합니다...

김동길(sw1893)님이 2013-03-20 16:57에 작성한 댓글입니다.

CREATE OR REPLACE FUNCTION fn_mig_w_jong(iColNM IN VARCHAR2)
RETURN VARCHAR2
IS
    v_sq VARCHAR2(1000) := iColNM;
    CURSOR cur1 IS
    SELECT asiscd, tobecd
      FROM w_jong
     WHERE iColNM LIKE '%' || asiscd || '%'
    ;
BEGIN
    FOR c IN cur1
    LOOP
        v_sq := REPLACE(v_sq, c.asiscd, c.tobecd);
    END LOOP;
    RETURN v_sq;
EXCEPTION
    WHEN OTHERS THEN
        RETURN v_sq;
END;
/

마농(manon94)님이 2013-03-20 18:26에 작성한 댓글입니다.

마농님 정말 감사합니다~~~~~

LIKE 검색이라...속도에 압박이.....ㅎ............100건만 SELECT 하는데도....35분이나..걸리네요..ㅎ

타겟테이블 건수가 약 8천만건정도라....

김동길(sw1893)님이 2013-03-20 20:02에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
40071원격 접속시에 오라클 클라이언트 설치???
최규성
2013-03-21
5472
40070ora-01632 오류 조치후 한달후에 다시 오류발생 [2]
한상원
2013-03-21
5568
40069FOR문 안에서 EXECUTE 안먹나요?
corny5
2013-03-20
5413
40068RE) 코드변환 도움요청 [4]
김동길
2013-03-20
5670
40067코드변환 도움 요청..ㅠ [1]
김동길
2013-03-20
5377
40066Oracle 함수 Function을 만들어보려 합니다.
새하정
2013-03-20
5234
40065테이블명,컬럼명에 " "(따옴표)가 들어가있는경우 [3]
오석균
2013-03-20
6561
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.022초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다