오라클 clob 줄바꿈 - olakeul clob julbakkum

오라클에 데이터를 넣을 때, 다양한 데이터가 들어갈 수 있지만 textarea와 같은 곳에 들어간 내용은 줄바꿈이 필요할 경우가 있다.

기본적으로 개행을 삽입하기 위해서 아래와 같이 표현할 수 있다.

UPDATE 테이블 명

SET '안녕'||CHR(13)||CHR(10)||'하세요'

WHERE 조건

결과값 : 

안녕

하세요

*) CHR()은 숫자를 아스키코드로 변환해주는 함수이며,

CHR(13) : carriage return(캐리지 리턴) > 현재 라인의 첫 번째 자리에 커서를 위치

CHR(10) : new line(라인 피트) > 커서 위치를 아래쪽으로 이동

각각 위와 같은 의미를 가지고 있으므로 현재 라인 첫번째 자리에서 아래로 커서가 이동하여 '\n'과 같은 줄바꿈을 확인할 수 있다.

반대로 개행을 제거하기 위해서는 아래와 같이 replace를 이용하여 처리할 수 있다.

replace(컬럼명, CHR(13) || CHR(10), '')

replace(replace(컬럼명, CHR(10), ''), CHR(13), '')

안녕하세요.

오늘은 오라클에서 줄바꿈 문자를 제거하는 포스팅을 하겠습니다.

쿼리는 상당히 간단합니다.

저는 jqgrid를 사용하면서 줄바꿈 문자들이 들어가면 안된다는 에러를 찾았고

쿼리단에서 줄바꿈 문자를 제거하기로 하였습니다.

먼저, 오라클의 chr 함수를 사용해야 합니다.

chr 함수의 쓰임새 입니다.

CHR(9) : 탭문자

CHR(10) : 줄바꿈(라인피드)

CHR(13) : 행의 처음(캐리지리턴)

CHR(38) : &

CHR(39) : '(따옴표)

CHR(44) : 쉼표

그리고 제가 사용한 예 입니다.

저는 줄바꿈 문자를 제거하는 방향으로 사용하였습니다.

replace(replace(컬럼, chr(10), ''), chr(13), '')

이렇게 하면 줄바꿈 문자가 제거되서 출력됩니다.

플그래밍~그! 2011. 5. 24. 17:16


String 임시저장용 = resultMap.getString("받아온놈");
   임시저장용 = 임시저장용.replace("\r\n", "<br>");
   resultMap.put("받아온놈(다시돌려놓기)", 임시저장용);

이거한개 추가하는게 그리 귀찮드라~

'플그래밍~그!' 카테고리의 다른 글

작업 문서에서의 인코딩 설정  (0)2011.05.24
Java+XML Programming 의 Parser DOM과 SAX  (0)2011.05.24
[JSP/JAVA] 최상위, 파일 경로 알아내기  (0)2011.05.24
clob 엑셀파일 저장시 음표모양뜨는거 삭제  (0)2011.05.24
테스트용  (0)2011.05.20

Posted by 혀나니

, 댓글 0개가 달렸습니다

댓글을 달아 주세요

    : 이름

    : 패스워드

    : 홈페이지

    비밀글

    오라클 clob 줄바꿈 - olakeul clob julbakkum

    우선 오라클에서 사용되는 CHR 함수 몇 개에 대해서 알아야 이해가 빠르다.

    CHR(9) : 탭(Tab)문자

    CHR(10) : 줄바꿈(LF)

    CHR(13) : 행의 처음(CR)

    CHR(38) : 앰퍼샌드 기호 (&)

    CHR(39) : 홑따옴표 기호 (')

    CHR(44) : 쉼표 (,)


    DB에 특수문자를 넣어야 하는 경우 아래와 같은 문법을 활용할 수 있다.

    SELECT
        'SA' || CHR(10) || 'MP' || CHR(44) || 'LE' AS X
    FROM DUAL


    SELECT시 특수문자를 제거해야 하는 경우 아래와 같은 문법을 활용할 수 있다.

    SELECT
      REPLACE(X, CHR(44), '') AS Y
    FROM
    (
    SELECT
        'SA' || CHR(10) || 'MP' || CHR(44) || 'LE' AS X
    FROM DUAL
    )

    즉, REPLACE([컬럼], 변경전문자, 변경후문자) 와 같은 식이다.

    SQL Loader를 이용하여 CLOB 타입의 데이터를 로드하려고 했다.

    -> Control File에서 char(1000000)으로 받으니 되었다.

    CLOB 타입 데이터에 /n(개행) 문자가 있어서 data file을 정상적으로 구분하지 못한다. (다른 row로 인식하는 에러)

    -> Control File (infile data directory/dataname.dat 이후 "str X'0D0A'" (기본 엔터) "STR x'hex_str'" 의 옵션을 이용하여 줄 바꿈 구분자(hex code)를 설정할 수 있다.

    Record terminators for datafiles that are in stream format in the UTF-16 Unicode encoding default to "\n" in UTF-16 (that is, 0x000A on a big-endian system and 0x0A00 on a little-endian system). You can override these default settings by using the "STR 'char_str'" or the "STR x'hex_str'" specification on the INFILE line. For example, you could use either of the following to specify that 'ab' is to be used as the record terminator, instead of '\n'.

    - 출처 : http://docs.oracle.com/cd/B28359_01/server.111/b28319/ldr_control_file.htm

    -> 나의 경우 컨트롤 파일에서 Data를 infile구문에 넣지 않고 쉘을 이용하여 Command 명령을 해야 했기 때문에 다른 방법을 이용했다.

    -> SELECT REPLACE(REPLACE(컬럼,CHR(13),''),CHR(10),''); 구문을 이용하여 줄 바꿈을 공백으로 치환하였다.

    CHR(13) : 캐리지 리턴(carriage return)

    CHR(10) : 라인 피드(new line)

    * hex code 찾는 쿼리 : Select utl_raw.cast_to_raw('^'||chr(10)) from dual; 

    REPLACE

    - 구문 : REPLACE(char,search_string,'replacement_string') 

    - 목적 : search_string이 나타날 때 replacement_string으로 치환해서 char를 리턴한다. replacement_string을 지정하지 않은 경우에는 char안에 나타나는 모든 search_string을 삭제한다.

    search_string도 replacement_string도 지정하지 않을 경우에는 함수는 NULL을 리턴한다.

    REPLACE 함수는 TRANSLATE 함수 슈퍼세트에 대응한다. TRANSLATE 함수는 1문자의 치환을 행하는 것에 반해서 REPLACE 함수는 문자열의 치환과 삭제를 행할 수 있다.

    *  예  SELECT REPLACE('JACK AND JUE','J','BL') "change" FROM DUAL;

    아래는 구글링 검색을 통해 데이터에 엔터가 포함되었을때 로드 하는 방법을 찾은 결과이다.

    컬럼에 엔터가 포함된 데이터들을 sql loader로 올리는 방법 

    -- test2 테이블 생성 -- 
    CREATE TABLE test2 (no number(1), timestamp date, xxx VARCHAR2(100)); 

    -- ControlFile : test2.ctl -- 
    LOAD DATA 
    INFILE ".\test2.txt" "str '$\r\n'" 
    BADFILE test2.bad 
    APPEND INTO TABLE test2 
    FIELDS TERMINATED BY ',' 
    TRAILING NULLCOLS 
    ( "NO" NULLIF ("NO"="NULL") 
    , "TIMESTAMP" DATE 'MM/DD/YYYY HH24:MI:SS' NULLIF "TIMESTAMP"="NULL" 
    , xxx 
    ) 

    -- DataFile : test2.txt -- 
    1,05/04/2011 00:00:00,aaa$ 
    2,NULL,bbb 
    ccc 
    ddd$ 
    NULL,05/04/2011 01:00:00,땡큐$ 

    -- Sqlldr 실행 -- 
    sqlldr scott/tiger control=test2.ctl

    [sqlldr 옵션 readsize]

    readsize값이 작다고 에러가 발생 시

    -> sqlldr 옵션에서 readsize(기본값 1048576)를 MAX값으로 변경해 주면 된다.

    TODO) 추가적으로 CLOB에 대해 조사

    태그Clob, hex code, loader, orcale, readsize, replace, SQL Loader, sqlldr 옵션, str x'hex_str', 개행, 엔터, 엔터가 포함된 데이터