clobs 및 varchar2로 조금 실험했습니다. 우리가 데이터베이스 테이블에 많은 XML을 가지고 있으며 가능한 한 빨리 XML을 다운로드하려고했습니다. C# DevArt 구성 요소를 사용해야 할 때 여러 가지 방법을 시도하여 clob (행 당 데이터베이스로의 왕복 이동을 포함)이 varchar2보다 훨씬 느리다는 것을 알았습니다.ORA-06502 (varchar2에서 clob로 변환)
따라서 지금 데이터를 두 단계로 다운로드 중입니다. 먼저 varchar2 (4000 바이트 한도)만큼, 그 다음은 clob으로 모든 것을 할 수 있습니다.
이제 까다로운 부분.
select c.xml.getstringval() from customers c where
length(t.xml.getclobval()) = length(dbms_lob.substr(c.xml.getclobval(), 4000, 1))
쿼리는 길이가 CLOB의 문자 수를 반환하고, SUBSTR가 함께 문자열을 반환한다는 가정에 기초한다 : 나는 VARCHAR2로 검색 할 수 있는지 확인하려면 다음 쿼리를 내놓았다 특정 바이트 수. 그것은 길이만으로는 작동하지 않습니다. 왜냐하면 나는 다중 바이트 문자로 문제를 일으키기 때문입니다. 하지만 지금은 또 다른 이상한 행동이 있습니다. 위의 쿼리는 대부분의 행에서 작동하지만 그 중 일부는 여전히 ORA-06502를 발생시킵니다. 하지만 3992로 제한을 변경하면 항상 작동합니까 ??? (정보로서 XML의 Base64로 인코딩 된 문자열로 그림의 축소판을 저장합니다).
누구나 쿼리가 모든 경우에 작동하지 않는 이유는 무엇입니까? 또는 clob을 varchar2로 검색 할 수 있는지 확인하는 쿼리를 작성하는 방법에 대한 제안 사항이 있습니까?