以下是我的查询:
SELECT dbms_lob.compare(NVL(original_xmldoc,'Null'),NVL(update_xmldoc,'Null'))
FROM xml_files;当我执行时,我收到一个错误:
ORA-06553: PLS-306: wrong number or types of arguments in call to 'COMPARE'
06553. 00000 - "PLS-%s: %s"我的语法有什么问题吗?
打招呼,
Nelz Ki
发布于 2016-03-07 09:34:43
如果您的数据类型是CLOB,那么可以:
SELECT DBMS_LOB.COMPARE(
NVL( original_xmldoc, Empty_CLOB() ),
NVL( updated_xmldoc, Empty_CLOB() )
)
FROM xml_files;但是,这可能不会产生您正在看到的错误,所以我假设您使用的是XMLType数据类型:
SELECT DBMS_LOB.COMPARE(
NVL( original_xmldoc.getClobVal(), Empty_CLOB() ),
NVL( updated_xmldoc.getClobVal(), Empty_CLOB() )
)
FROM xml_files;(您可以使用魔术字符串'Null'__,如您的示例所示,而不是Empty_CLOB(),但在我看来,与空字符串而不是组合值进行比较更自然-但是,您比我们更了解您的数据,因此它可能正好相反。)
发布于 2016-03-07 09:28:25
从您以前的问题来看,您的列是XMLType,而不是CLOB:
create table xml_files(original_xmldoc xmltype, update_xmldoc xmltype);
SELECT dbms_lob.compare(NVL(original_xmldoc,'Null'),NVL(update_xmldoc,'Null'))
FROM xml_files;
ORA-06553: PLS-306: wrong number or types of arguments in call to 'COMPARE'function期望CLOBs (或BLOB)或一些被隐式转换为它们的东西。XMLTypes不能。因此,您需要显式地转换它们:
SELECT dbms_lob.compare(NVL(x.original_xmldoc.getclobval(),'Null'),
NVL(x.update_xmldoc.getclobval(),'Null'))
FROM xml_files x;但是,您正在将固定的字符串值与XML文档进行比较,这可能会得到错误的结果,因为您正在进行语言比较,实质上是在该字符串的'N'和实际XML文档的'<'之间进行比较。正如MTO所说,使用empty_clob()可能比使用'Null'更好--通过快速测试,它们得到了相反的结果。NLS设置可能会改变固定字符串版本本身的结果。
可以说,如果您只希望结果为零(相同)或非零(由于任何原因不同),那么这并不重要,但它仍然是更好的是它是正确的。也许以后有人会看实际价值,却没有意识到这是错误的。
https://stackoverflow.com/questions/35839734
复制相似问题