我收到错误ORA-01830:日期格式图片在XMLType对象上执行schemaValidate()时转换整个输入字符串之前结束。
这是因为以下日期:“2016-05-26T16:37:42Z”,但当我删除Z并将其保留为“2016-05-26T16:37:42”时,它可以正常工作。
为什么会这样?我需要使用区域值运行该进程,因为我无法更改传入的文件,这是需求的一部分。此外,它使用SSIS正确运行,但我需要它在Oracle PL / SQL中运行。
这是我的代码:
DECLARE
v_schema_url VARCHAR2 (200) := 'Test.xsd';
v_blob BLOB;
v_clob CLOB;
v_xml XMLTYPE;
xml_file BFILE;
xmlClob CLOB;
src_offset number := 1 ;
dest_offset number := 1 ;
lang_ctx number := DBMS_LOB.DEFAULT_LANG_CTX;
warning integer;
res integer;
BEGIN
dbms_xmlschema.deleteschema(v_schema_url);
DBMS_XMLSCHEMA.registerschema (schemaurl => v_schema_url,
schemadoc => bfilename ('DIR_XSD','Test.xsd'),
local => TRUE);
xml_file := BFILENAME('DIR_XSD', 'test.xml');
DBMS_LOB.CREATETEMPORARY(xmlClob, true);
DBMS_LOB.FILEOPEN(xml_file, DBMS_LOB.FILE_READONLY);
DBMS_LOB.LOADCLOBFROMFILE(xmlClob, xml_file, DBMS_LOB.LOBMAXSIZE, src_offset,
dest_offset, DBMS_LOB.DEFAULT_CSID, lang_ctx, warning);
v_xml := XMLType.createXML(xmldata=>xmlClob,schema=>v_schema_url);
DBMS_LOB.FILECLOSEALL();
DBMS_LOB.FREETEMPORARY(xmlClob);
v_xml.schemaValidate();
IF v_xml.isschemavalid (v_schema_url) = 1 THEN
DBMS_OUTPUT.put_line ('valid');
ELSE
DBMS_OUTPUT.put_line ('not valid');
END IF;
END;
答案 0 :(得分:1)
通过在DateTime定义中添加以下内容来修复它:
xdb:SQLType="TIMESTAMP WITH TIME ZONE"
还需要将以下内容添加到顶层架构定义中:
xmlns:xdb="http://xmlns.oracle.com/xdb"