Oracle 데이터베이스 내에서 Long data type을 검색하는 가장 좋은 방법은 무엇입니까?
저는 HTML을 Long data type으로 저장하는 Oracle 데이터베이스로 작업하고 있습니다.Long에 저장된 HTML 데이터 내의 특정 문자열을 검색하기 위해 데이터베이스에 문의하고자 합니다.
TAB에서 *를 선택합니다.LE에서 COLUMN은 '%form%'를 좋아합니다."Long data type에는 "like"가 지원되지 않으므로 다음과 같은 Oracle 오류가 발생합니다.
ORA-00932: 일치하지 않는 데이터 유형: 예상 번호가 길어졌습니다.
이 예제는 임시 테이블을 사용하지 않고 사용할 수 있습니다.
DECLARE
l_var VARCHAR2(32767); -- max length
BEGIN
FOR rec IN (SELECT ID, LONG_COLUMN FROM TABLE_WITH_LONG_COLUMN) LOOP
l_var := rec.LONG_COLUMN;
IF l_var LIKE '%350%' THEN -- is there '350' string?
dbms_output.put_line('ID:' || rec.ID || ' COLUMN:' || rec.LONG_COLUMN);
END IF;
END LOOP;
END;
물론 LONG이 32K자 이상이면 문제가 있습니다.
LONGs를 직접 검색할 수 없습니다.WHERE 절에는 LONGs가 표시될 수 없습니다.검사해야 할 행 수를 좁히기 위해 이를 사용할 수 있도록 SELECT 목록에 표시할 수 있습니다.
Oracle은 지난 2개 이상의 릴리스에 대해 LONGs를 CLOBs로 변환할 것을 권장했습니다.CLOB에 대한 제한이 적습니다.
예:
create table longtable(id number,text long);
insert into longtable values(1,'hello world');
insert into longtable values(2,'say hello!');
commit;
create or replace function search_long(r rowid) return varchar2 is
temporary_varchar varchar2(4000);
begin
select text into temporary_varchar from longtable where rowid=r;
return temporary_varchar;
end;
/
SQL> select text from longtable where search_long(rowid) like '%hello%';
TEXT
--------------------------------------------------------------------------------
hello world
say hello!
그러나 조심하라.PL/SQL 함수는 LONG의 처음 32K만 검색합니다.
첫 번째 변환LONG
열을 입력합니다.CLOB
타이핑 후 사용LIKE
조건, 예:
CREATE TABLE tbl_clob AS
SELECT to_lob(long_col) lob_col FROM tbl_long;
SELECT * FROM tbl_clob WHERE lob_col LIKE '%form%';
LONG을 사용하지 말고 CLOB을 사용하세요.VARCHAR2와 같은 CLOB를 인덱스하고 검색할 수 있습니다.
또한 선행 와일드카드(%)를 사용하여 쿼리하면 항상 전체 테이블 검색이 수행됩니다.대신 Oracle Text 인덱스를 살펴보십시오.
언급URL : https://stackoverflow.com/questions/769787/what-is-the-best-way-to-search-the-long-datatype-within-an-oracle-database
'programing' 카테고리의 다른 글
첫번째결과만선택하세요 (0) | 2023.10.05 |
---|---|
봄콩 스코프 (0) | 2023.10.05 |
시작 시 번들 전달 활동()? (0) | 2023.09.25 |
왜 $$를 $self와 $body에 넣습니까?그리고 자신은 $self와 같습니다. (0) | 2023.09.25 |
mysql에 문자열 길이에 제한이 있습니까? (0) | 2023.09.25 |