Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle 如何检查CLOB是否有prolog_Oracle_Oracle11g_Oracle10g - Fatal编程技术网

Oracle 如何检查CLOB是否有prolog

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

我有一个包含xml数据的clob列。在这里,我编写了一个验证数据是否为xml的函数。我使用了“xmldata:=XMLTYPE(xml);”。它工作得很好

我尝试了一些输入,比如

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