2016-05-31 7 views
0

XML을 생성하려고합니다. 현재 코드는 한 번에 하나의 XML 태그를 VARCHAR2 변수에 추가하여이를 수행합니다.VARCHAR2 대신 CLOB 사용

xmlString     VARCHAR2(32767); 
.... 
.... 
xmlString := xmlString || '<' || elementName || '>' || elementValue || '</' || elementName || '>'; 

그러나 때문에 VARCHAR2에 32767 개 문자의 크기 제한에, 우리는 매우 긴 XML에 대한 다음과 같은 오류가 발생합니다.

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

우리가 가지고있는 솔루션은 CLOB를 선언하고 CLOBVARCHAR2 변수를 플러싱 유지하는 프로 시저를 작성하는 것입니다.

v_result     clob; 
..... 
..... 
IF xmlString IS NOT NULL THEN 
     dbms_lob.writeappend(v_result, LENGTH(xmlString), xmlString); 
     xmlString := NULL; 
END IF; 

그러나 이렇게하려면 많은 새로운 코드 줄을 새로운 함수 호출로 교체해야합니다. 이 작업을 수행하는 더 좋은 방법이 있습니까?

PLSQL의 연산자 오버로딩과 비슷한 것이 있습니까? 변수 xmlString의 데이터 유형을 CLOB로 변경하고 의 작업을 수행 할 || 연산자를 만들 수 있습니까?

답변

4

예, xmlString의 데이터 형식을 clob으로 변경하면 문자열 연결 연산자가 계속 작동합니다.

그러나 XML을 이렇게 작성하는 것은 매우 열악한 아키텍처입니다. 이것은 예를 들어, 문자열 중 하나가 이스케이프해야하는 문자 (또는 여러 다른 이유 중 하나)가있을 때 유효하지 않은 XML을 생성 할 확률이 높은 아키텍처입니다. 오라클은 XML을 생성하기위한 모든 기능을 제공합니다 (사용 케이스에 따라 XMLElement, XMLForest, SYS_XMLGen, DBMS_XMLQuery 등). 이러한 내장 함수를 사용하는 것이 구조적으로 훨씬 낫습니다.