복붙노트

[SQL] 오라클의 CLOB 컬럼을 조회하는 방법

SQL

오라클의 CLOB 컬럼을 조회하는 방법

나는 CLOB 데이터 유형입니다 몇 가지 열이 쿼리를 실행하기 위해 노력하고있어. 내가 정상과 같은 쿼리를 실행하는 경우, 그 모든 필드는 값으로 (CLOB)가 있습니다.

나는 DBMS_LOB.substr (열)를 사용하여 시도와 나는 오류

ORA-06502: PL/SQL: numeric or value error: character string buffer too small

어떻게 CLOB 열을 조회 할 수 있습니다?

해결법

  1. ==============================

    1.CLOB로 컬럼의 문자열을 얻고 크기 / 버퍼 제한이 쿼리 도구를 사용하는 경우 때때로 더 큰 크기로 버퍼를 설정해야합니다. 예를 들어 SQL을 사용하여 플러스 기본값은 4000입니다 10000로 설정하기 위해 SET BUFFER 10000을 사용하는 동안.

    CLOB로 컬럼의 문자열을 얻고 크기 / 버퍼 제한이 쿼리 도구를 사용하는 경우 때때로 더 큰 크기로 버퍼를 설정해야합니다. 예를 들어 SQL을 사용하여 플러스 기본값은 4000입니다 10000로 설정하기 위해 SET BUFFER 10000을 사용하는 동안.

    DBMS_LOB.substr 명령을 실행하면 당신은 또한 당신이 반환을 원하고있는 오프셋 문자의 양을 지정할 수 있습니다. 버퍼를위한 작은 충분한 양을 제한 할 수 DBMS_LOB.substr (열, 3000)를 사용하여 그래서.

    SUBSTR 명령에 대한 자세한 정보를 원하시면 Oracle 설명서를 참조하십시오

    
        DBMS_LOB.SUBSTR (
           lob_loc     IN    CLOB   CHARACTER SET ANY_CS,
           amount      IN    INTEGER := 32767,
           offset      IN    INTEGER := 1)
          RETURN VARCHAR2 CHARACTER SET lob_loc%CHARSET;
    
    
  2. ==============================

    2.이 작품

    이 작품

    select DBMS_LOB.substr(myColumn, 3000) from myTable
    
  3. ==============================

    3.내 오라클 데이터베이스의 HugeClob와 다른 상태로 실행 않았다. dbms_lob.substr 만 기능, 전에서 4000의 값을 허용 :

    내 오라클 데이터베이스의 HugeClob와 다른 상태로 실행 않았다. dbms_lob.substr 만 기능, 전에서 4000의 값을 허용 :

    dbms_lob.substr(column,4000,1)
    

    너무 컸다 내 HughClob, 나는 선택에서 두 개의 호출을 사용했다 :

    select dbms_lob.substr(column,4000,1) part1, 
           dbms_lob.substr(column,4000,4001) part2 from .....
    

    나는 단순히 PART1과 파트 2를 연결된하고 이메일로 전송 그래서 나는 자바 응용 프로그램에서 호출되었다.

  4. ==============================

    4.큰 CLOB의 선택을 위해도 사용할 수 있습니다 :

    큰 CLOB의 선택을 위해도 사용할 수 있습니다 :

    foo는 FROM SELECT dbms_lob.substr (COLUMN_NAME, dbms_lob.getlength (COLUMN_NAME), 1)

  5. ==============================

    5.그것은 CLOB가 있다면 왜 우리는 열을 TO_CHAR 수 없으며 정상적으로 검색?

    그것은 CLOB가 있다면 왜 우리는 열을 TO_CHAR 수 없으며 정상적으로 검색?

    테이블 만들기

    CREATE TABLE MY_TABLE(Id integer PRIMARY KEY, Name varchar2(20), message clob);
    

    이 표에 몇 가지 기록을 작성

    INSERT INTO MY_TABLE VALUES(1,'Tom','Hi This is Row one');
    INSERT INTO MY_TABLE VALUES(2,'Lucy', 'Hi This is Row two');
    INSERT INTO MY_TABLE VALUES(3,'Frank', 'Hi This is Row three');
    INSERT INTO MY_TABLE VALUES(4,'Jane', 'Hi This is Row four');
    INSERT INTO MY_TABLE VALUES(5,'Robert', 'Hi This is Row five');
    COMMIT;
    

    크롭 열에서 검색

    SELECT * FROM MY_TABLE where to_char(message) like '%e%';
    

    결과

    ID   NAME    MESSAGE   
    ===============================  
    1    Tom     Hi This is Row one         
    3    Frank   Hi This is Row three
    5    Robert  Hi This is Row five
    
  6. ==============================

    6.또 다른 옵션은 CLOB 열을 선택해야 그 기능 매번 함수를 작성하고 호출하는 것입니다.

    또 다른 옵션은 CLOB 열을 선택해야 그 기능 매번 함수를 작성하고 호출하는 것입니다.

    create or replace function clob_to_char_func
    (clob_column in CLOB,
     for_how_many_bytes in NUMBER,
     from_which_byte in NUMBER)
    return VARCHAR2
    is
    begin
    Return substrb(dbms_lob.substr(clob_column
                                ,for_how_many_bytes
                                ,from_which_byte)
                ,1
                ,for_how_many_bytes);
    end;
    

    그와 같은 기능을 호출;

    SELECT tocharvalue, clob_to_char_func(tocharvalue, 1, 9999)
    FROM (SELECT clob_column AS tocharvalue FROM table_name);
    
  7. ==============================

    7.대답에 추가합니다.

    대답에 추가합니다.

    declare
    v_result clob;
    begin
    ---- some operation on v_result
    dbms_lob.substr( v_result, 4000 ,length(v_result) - 3999 );
    
    end;
    /
    

    dbms_lob.substr에서

    첫번째 매개 변수는 추출 할 CLOB입니다.

    두 번째 매개 변수는 압축을 얼마나 CLOB의 길이입니다.

    세 번째 매개 변수는 추출 할 단어에서이다.

    내가 지난 4000 문자를 할 수 있도록 위의 예에서 나는 나의 CLOB 크기 이상 50,000 알고있다.

  8. ==============================

    8.당신은 SQL을 사용하는 경우 * 플러스 다음을 시도 ...

    당신은 SQL을 사용하는 경우 * 플러스 다음을 시도 ...

    set long 8000
    
    select ...
    
  9. from https://stackoverflow.com/questions/3790379/how-to-query-a-clob-column-in-oracle by cc-by-sa and MIT license