Oracle 如何检查CLOB是否有prolog
我有一个包含xml数据的clob列。在这里,我编写了一个验证数据是否为xml的函数。我使用了“xmldata:=XMLTYPE(xml);”。它工作得很好 我尝试了一些输入,比如Oracle 如何检查CLOB是否有prolog,oracle,oracle11g,oracle10g,Oracle,Oracle11g,Oracle10g,我有一个包含xml数据的clob列。在这里,我编写了一个验证数据是否为xml的函数。我使用了“xmldata:=XMLTYPE(xml);”。它工作得很好 我尝试了一些输入,比如 SELECT isXML('<testfdjkasksdf</test>') FROM DUAL; O SELECT isXML('<test>fdjkasksdf</test>') FROM DUAL; 1 结束; /这有点像黑客,但你可以这样做: CREATE OR RE
SELECT isXML('<testfdjkasksdf</test>') FROM DUAL; O
SELECT isXML('<test>fdjkasksdf</test>') FROM DUAL; 1
结束;
/这有点像黑客,但你可以这样做:
CREATE OR REPLACE FUNCTION isXML(xml CLOB)
RETURN NUMBER
AS
xmldata XMLTYPE;
xml_parse_error EXCEPTION;
PRAGMA EXCEPTION_INIT(xml_parse_error, -31011);
BEGIN
BEGIN
xmldata := XMLTYPE(xml);
EXCEPTION
WHEN xml_parse_error THEN
return 0;
END;
BEGIN
xmldata := xmltype('<?xml version="1.0"?>' || xml);
EXCEPTION
WHEN xml_parse_error THEN
-- xml already had prolog
xmldata := null;
END;
IF xmldata is not null then
-- xml did not already have prolog
return 0;
END IF;
return 1;
END;
/
如果生成了该错误,则xml
确实有一个prolog,并且xmldata
设置为null。如果未生成该错误,则xml
没有序言,并且xmldata
将包含xml文档
然后我检查xmldata
是否为空。如果是,那么它出错了,有一个序言,所以它是好的。如果它不是null,那么最初就没有prolog,我们希望将其视为错误
SELECT isXML('<testfdjkasksdf</test>') FROM DUAL;
ISXML('<TESTFDJKASKSDF</TEST>')
-------------------------------
0
SELECT isXML('<test>fdjkasksdf</test>') FROM DUAL;
ISXML('<TEST>FDJKASKSDF</TEST>')
--------------------------------
0
SELECT isXML('<?xml version="1.0" standalone="yes"?><test>fdjkasksdf</test>')
FROM DUAL;
ISXML('<?XMLVERSION="1.0"STANDALONE="YES"?><TEST>FDJKASKSDF</TEST>')
--------------------------------------------------------------------
1
SELECT isXML('thq作为响应。我已经用ur函数更新了,然后尝试从DUAL中选择isXML('fdjkasksdf');它给了我1,但我希望它是0。因为它没有prolog。它是这样工作的。@user1268890-当我运行SELECT isXML('fdjkasksdf')时从DUAL;
中,通过该功能代码,我得到了0
。您用10g和11g标记了问题;您使用的是哪个确切版本?我在11.2.0.3上进行了测试,是11.2.0.2。非常感谢您,它正在工作。我使用的是11g express edition。
ORA-31011: XML parsing failed
ORA-19202: Error occurred in XML processing
LPX-00209: PI names starting with XML are reserved
SELECT isXML('<testfdjkasksdf</test>') FROM DUAL;
ISXML('<TESTFDJKASKSDF</TEST>')
-------------------------------
0
SELECT isXML('<test>fdjkasksdf</test>') FROM DUAL;
ISXML('<TEST>FDJKASKSDF</TEST>')
--------------------------------
0
SELECT isXML('<?xml version="1.0" standalone="yes"?><test>fdjkasksdf</test>')
FROM DUAL;
ISXML('<?XMLVERSION="1.0"STANDALONE="YES"?><TEST>FDJKASKSDF</TEST>')
--------------------------------------------------------------------
1