: 참조 대량 파싱 된 XML 문자열 CLOB 내부의 필드에 커서를 사용하여 Oracle 저장 프로 시저
배경 : 저장 프로 시저를 작성, 당신은 정보 양식 제출을 얻을 필요가있다. 정보 문자열이 XML 형식으로 그것을 저장하는 방법에 필드 dataxml의 양식 COLB 유형에? 바이 컨텐츠를 참조하면, 기록 기능 (작용), XML 형식 문자열 파라미터 (dataxml 값)과 소정의 노드 (노드 명), 특정 노드 (nodeValue를)의 값을 반환한다.
코딩 :
시작을 달성 --get_xml_nodeValue
RETURN VARCHAR2 펑션 get_xml_nodeValue (xmlStr CLOB 노드 이름 VARCHAR2)를 작성 OR REPLACE IS
- 만들기 XML 파서 인스턴스 xmlparser.Parser
xmlPar xmlparser.Parser = xmlparser.newParser,
-는 DOM 문서의 정의
xDoc의 xmldom.DOMDocument;
- 항목의 정의는 변수의 자식 노드 번호
lenItme INTEGER;
- 정의 노드의 목록에서 노드 항목을 저장 그들은
itemNodes xmldom.DOMNodeList;
- 정의 노드, 노드가 단일 항목 저장
itemNode xmldom.DOMNode,
valueReturn VARCHAR2를 (100);
시작
XML 문자열에 분석 xmlStr하고있는 xmlPar을 배치 -
(xmlPar, xmlStr) xmlparser.parseClob;
- 덤프 데이터 xmlPar DOM 문서
xDoc = xmlparser.getDocument (xmlPar를)
- 릴리스 파서 인스턴스
xmlparser.freeParser (xmlPar)
- 모든 항목 노드의 개요
itemNodes = xmldom.getElementsByTagName을 (xDoc, 노드 명)
- 노드 획득 한 아이템의 수
lenItme = xmldom.getLength (itemNodes)
- 아니하는 경우 라벨, 반환이 비어
는 IF lenItme = 0 THEN
valueReturn : = '';
ELSE
- 목록 항목 노드의 첫 번째 노드를 취득
itemNode = xmldom.item (itemNodes, 0);
- 모든 자식 노드의 값을 가져옵니다
valueReturn = xmldom.getNodeValue (xmldom.getFirstChild (itemNode))
단부는 IF;
- 분리 DOM
xmldom.freeDocument (xDoc);
RETURN valueReturn;
END get_xml_nodeValue;
목적을 달성 --get_xml_nodeValue
테스트 전화 :
表 : FORM_DATA;
字段 : DATAXML, 字段 值 "<데이터> <ID> 1 </ ID> <이름> 张三 </ 이름> <전화> 17700000000 </ 전화> <ID_NUMBER> 410527999909099999 </ ID_NUMBER> </ 데이터>";
질의 1 : form_data F에서 get_xml_nodeValue (f.dataxml, '이름')를 선택하고, 결과 : 장을;
질의 2 : form_data F에서 get_xml_nodeValue (f.dataxml, '전화')를 선택하고, 결과 : 17,700,000,000를;
질의 3 : form_data F에서 get_xml_nodeValue (f.dataxml, 'ID_NUMBER')를 선택하고, 결과 : 410527999909099999.
완료!