我想比较 oracle 中的 TEXT(LONG) FROM USER_VIEWS 表与用户创建的表 ALL_VIEWS_BACKUP 中的文本(CLOB)。
类似的东西:
CREATE TABLE ALL_VIEWS_BACKUP AS SELECT VIEW_NAME,TEXT_LENGTH,TO_LOB(TEXT) AS text FROM USER_VIEWS;
SELECT dbms_lob.compare(to_lob(avt.TEXT),avb.TEXT) FROM ALL_VIEWS_BACKUP avb,USER_VIEWS avt WHERE avb.VIEW_NAME = avt.VIEW_NAME;
表创建成功。
文本差异结果应为1,相同结果应为0, 但在查询中我得到了错误 - ORA-00932:不一致的数据类型:预期 - 很长。
帮我解决这个问题
谢谢
您看到的错误是因为 DBMS_LOB.COMPARE 函数不支持比较 LONG 数据类型和 CLOB 数据类型。
这个问题的一个解决方案是使用 TO_LOB 函数将 LONG 数据类型转换为 CLOB 数据类型。这是您查询的更新版本:
SELECT DBMS_LOB.COMPARE(TO_LOB(avt.TEXT), avb.TEXT)
FROM ALL_VIEWS_BACKUP avb, USER_VIEWS avt
WHERE avb.VIEW_NAME = avt.VIEW_NAME;
通过使用 TO_LOB 函数将 LONG 数据类型转换为 CLOB 数据类型,您现在可以使用 DBMS_LOB.COMPARE 函数比较两个文本字段。