programing

clob에 Oracle 문자열이 포함되어 있는지 확인합니다.

i4 2023. 6. 30. 22:04
반응형

clob에 Oracle 문자열이 포함되어 있는지 확인합니다.

현재 저는 이 코드에 대한 질문이 있습니다.to_char(CLOB_COLUM) like %s하지만 다음은 아주 큰 클럽에는 효과가 없을 것입니다.이 열에 문자열이 포함되어 있는지 확인할 수 있는 다른 솔루션이 있습니까?오라클 11.2.0.4.0 사용

다음을 사용할 수 있습니다.

SELECT *
FROM   your_table
WHERE  DBMS_LOB.INSTR( clob_column, 'string to match' ) > 0;

또는

SELECT *
FROM   your_table
WHERE  clob_column LIKE '%string to match%';

MT0의 답변을 기반으로 합니다.저는 어떤 방법이 효율적인지 테스트합니다.

CLOB 열 길이는 155018이며 32개의 길이 문자열을 검색합니다.

여기 제 시험이 있습니다.

| INSTR  | LIKE  |
|:-------|------:|
| 0.857  |0.539  |
| 0.127  |0.179  |
| 1.635  |0.534  |
| 0.511  |0.818  |
| 0.429  |1.038  |
| 1.586  |0.772  |
| 0.461  |0.172  |
| 0.126  |1.379  |
| 1.068  |1.088  |
| 1.637  |1.169  |
| 0.5    |0.443  |
| 0.674  |0.432  |
| 1.201  |0.135  |
| 0.419  |2.057  |
| 0.731  |0.462  |
| 0.787  |1.956  |

enter image description here

INSTR의 평균 시간은 0.797입니다.

LIKE의 평균 시간은 0.823입니다.

열의 값을 확인하고 오라클이 반환하는 경우ORA-22835(너무 작은 크기로 표시됨)WHERE clob_column LIKE '%string to match%'그런 다음 해결 방법을 적용해야 합니다.

의 조합DBMS_LOB.instr그리고.DBMS_LOB.substr해결책이 될 수 있습니다.예: 이 스택 오버플로 팁을 참조하십시오.그래서, 당신의 경우:

SELECT DBMS_LOB.substr(your_clob_column, DBMS_LOB.instr(your_clob_column,'string to match'), 1) AS Text
FROM your_table
WHERE DBMS_LOB.instr(your_clob_column, 'string to match') > 0 

사용하다DBMS_LOB.COMPARE()

SELECT *
FROM   your_table
WHERE  DBMS_LOB.COMPARE( clob_column, 'string to match' ) = 0;

비교가 성공하면 반환 값 정수: 0, 실패하면 0이 아닙니다.

언급URL : https://stackoverflow.com/questions/44025050/check-if-clob-contains-string-oracle

반응형