以下是我的询问:
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
答案 0 :(得分:2)
如果您的数据类型为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()
而不是 from spiders.DmozSpider import DmozSpider
from spiders.CraigslistSpider import CraigslistSpider
from scrapy import signals, log
from twisted.internet import reactor
from scrapy.crawler import Crawler
from scrapy.settings import Settings
TO_CRAWL = [DmozSpider, CraigslistSpider]
RUNNING_CRAWLERS = []
def spider_closing(spider):
"""Activates on spider closed signal"""
log.msg("Spider closed: %s" % spider, level=log.INFO)
RUNNING_CRAWLERS.remove(spider)
if not RUNNING_CRAWLERS:
reactor.stop()
,但在我看来比较空字符串而不是组合值更自然 - 但是,您比我们更了解您的数据,因此反过来可能是合适的。)
答案 1 :(得分:1)
根据您之前的问题,您的列是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'
dbms_lob.compare()
function期望CLOB(或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设置可能会改变固定字符串版本的结果 - 本身就很糟糕。
可以说,如果你只是在寻找零(相同)或非零(由于任何原因不同)的结果,那么它并不重要,但它仍然更好是正确的。也许有人会在以后查看实际值而不会意识到这是错误的。