如何在 Oracle 中将 xml 类型提取为 xml
How to Extract xmltype as xml in Oracle
我正在尝试从 xmltype
文档中提取 xml。
DECLARE
xmlData XMLType;
sDocumentId VARCHAR2(100);
sFormat VARCHAR2(100);
cData CLOB;
BEGIN
xmlData := XMLType( '<main>
<document_id>1234567</document_id>
<format>E66</format>
<data><Fname>ABCD</Fname><Lname>EFGD</Lname></data>
</main>');
SELECT ExtractValue(xmlData, '/main/document_id/text()'),
ExtractValue(xmlData, '/main/format/text()'),
ExtractValue(xmlData, '/main/data/text()')
INTO sDocumentId,
sFormat,
cData
FROM (SELECT xmlData FROM DUAL);
dbms_output.put_line(sDocumentId);
dbms_output.put_line(sFormat);
dbms_output.put_line(cData);
END;
如何得到这样的输出:
- DocumentId =
1234567
- sFormat =
E66
- cData =
<Fname>ABCD</Fname><Lname>EFGD</Lname>
使用下面的代码。
DECLARE
xmlData XMLType;
sDocumentId VARCHAR2(100);
sFormat VARCHAR2(100);
cData Clob;
BEGIN
xmlData := XMLType( '<main>
<document_id>1234567</document_id>
<format>E66</format>
<data><Fname>ABCD</Fname><Lname>EFGD</Lname></data>
</main>');
SELECT ExtractValue(xmlData, '/main/document_id/text()'),
ExtractValue(xmlData, '/main/format/text()'),
EXTRACT(xmlData,'/main/data').getClobVal()
INTO sDocumentId,
sFormat,
cData
FROM ( SELECT xmlData FROM DUAL);
dbms_output.put_line(sDocumentId);
dbms_output.put_line(sFormat);
dbms_output.put_line(cData);
END;
输出将是
1234567
E66
<data><Fname>ABCD</Fname><Lname>EFGD</Lname></data>
你可以这样做:
SELECT EXTRACTVALUE(xmlData, '/main/document_id/text()'),
EXTRACTVALUE(xmlData, '/main/format/text()'),
EXTRACT(xmlData, '/main/data').GetClobVal()
INTO sDocumentId,
sFormat,
cData
FROM (SELECT xmlData FROM DUAL) t;
请注意,EXTRACTVALUE
和 EXTRACT
已弃用。但是,我没有设法使用 XMLTABLE
,但这可能是一个起点:
SELECT *
INTO sDocumentId,
sFormat,
cData
FROM XMLTABLE('/main' PASSING xmlData COLUMNS
sDocumentId VARCHAR2(100) PATH 'document_id/text()',
sFormat VARCHAR2(100) PATH 'format/text()',
cData VARCHAR2(1000) PATH 'data/text()');
我正在尝试从 xmltype
文档中提取 xml。
DECLARE
xmlData XMLType;
sDocumentId VARCHAR2(100);
sFormat VARCHAR2(100);
cData CLOB;
BEGIN
xmlData := XMLType( '<main>
<document_id>1234567</document_id>
<format>E66</format>
<data><Fname>ABCD</Fname><Lname>EFGD</Lname></data>
</main>');
SELECT ExtractValue(xmlData, '/main/document_id/text()'),
ExtractValue(xmlData, '/main/format/text()'),
ExtractValue(xmlData, '/main/data/text()')
INTO sDocumentId,
sFormat,
cData
FROM (SELECT xmlData FROM DUAL);
dbms_output.put_line(sDocumentId);
dbms_output.put_line(sFormat);
dbms_output.put_line(cData);
END;
如何得到这样的输出:
- DocumentId =
1234567
- sFormat =
E66
- cData =
<Fname>ABCD</Fname><Lname>EFGD</Lname>
使用下面的代码。
DECLARE
xmlData XMLType;
sDocumentId VARCHAR2(100);
sFormat VARCHAR2(100);
cData Clob;
BEGIN
xmlData := XMLType( '<main>
<document_id>1234567</document_id>
<format>E66</format>
<data><Fname>ABCD</Fname><Lname>EFGD</Lname></data>
</main>');
SELECT ExtractValue(xmlData, '/main/document_id/text()'),
ExtractValue(xmlData, '/main/format/text()'),
EXTRACT(xmlData,'/main/data').getClobVal()
INTO sDocumentId,
sFormat,
cData
FROM ( SELECT xmlData FROM DUAL);
dbms_output.put_line(sDocumentId);
dbms_output.put_line(sFormat);
dbms_output.put_line(cData);
END;
输出将是
1234567
E66
<data><Fname>ABCD</Fname><Lname>EFGD</Lname></data>
你可以这样做:
SELECT EXTRACTVALUE(xmlData, '/main/document_id/text()'),
EXTRACTVALUE(xmlData, '/main/format/text()'),
EXTRACT(xmlData, '/main/data').GetClobVal()
INTO sDocumentId,
sFormat,
cData
FROM (SELECT xmlData FROM DUAL) t;
请注意,EXTRACTVALUE
和 EXTRACT
已弃用。但是,我没有设法使用 XMLTABLE
,但这可能是一个起点:
SELECT *
INTO sDocumentId,
sFormat,
cData
FROM XMLTABLE('/main' PASSING xmlData COLUMNS
sDocumentId VARCHAR2(100) PATH 'document_id/text()',
sFormat VARCHAR2(100) PATH 'format/text()',
cData VARCHAR2(1000) PATH 'data/text()');