【发布时间】:2017-12-15 11:15:07
【问题描述】:
运行以下查询时遇到 oracle 异常 ORA-22992: 无法使用从远程表中选择的 LOB 定位器
SELECT
OLU.CNIC,
OLU.LR_USER_NAME NAME,
OLU.FATHERS_NAME,
OLU.ADDRESS,
BATCH_VERIF.CREATED_DATE BATCH_DATE,
TO_DATE(OLU.ATTRIBUTE9, 'mm/dd/yyyy hh:mi:ss AM') TRANSLATION_DATE
FROM ORION.ORN_LR_USER@LIV OLU
INNER JOIN
(
SELECT MAX(BATCH_ID) BATCH_ID, CNIC
FROM ORION.ORN_LR_BATCH_CNIC@LIV
WHERE IMPORT_DATE IS NOT NULL AND IMPORTED = 'T'
GROUP BY CNIC
) BATCH_CNIC
ON (BATCH_CNIC.CNIC = OLU.CNIC
AND NVL (OLU.IS_BATCH_VERIFIED, 'F') = 'T'
AND NVL (OLU.ATTRIBUTE10, 'F') = 'T'
AND OLU.ATTRIBUTE9 IS NOT NULL)
INNER JOIN ORION.ORN_FILE_BATCH_VERIF@LIV BATCH_VERIF
ON BATCH_VERIF.BATCH_ID = BATCH_CNIC.BATCH_ID;
但是在评论 TRANSLATION_DATE 之后它工作正常,lob 类型的列也不是......可能是什么原因?
SELECT
OLU.CNIC,
OLU.LR_USER_NAME NAME,
OLU.FATHERS_NAME,
OLU.ADDRESS,
BATCH_VERIF.CREATED_DATE BATCH_DATE
--TO_DATE(OLU.ATTRIBUTE9, 'mm/dd/yyyy hh:mi:ss AM') TRANSLATION_DATE
FROM ORION.ORN_LR_USER@LIV OLU
INNER JOIN
(
SELECT MAX(BATCH_ID) BATCH_ID, CNIC
FROM ORION.ORN_LR_BATCH_CNIC@LIV
WHERE IMPORT_DATE IS NOT NULL AND IMPORTED = 'T'
GROUP BY CNIC
) BATCH_CNIC
ON (BATCH_CNIC.CNIC = OLU.CNIC
AND NVL (OLU.IS_BATCH_VERIFIED, 'F') = 'T'
AND NVL (OLU.ATTRIBUTE10, 'F') = 'T'
AND OLU.ATTRIBUTE9 IS NOT NULL)
INNER JOIN ORION.ORN_FILE_BATCH_VERIF@LIV BATCH_VERIF
ON BATCH_VERIF.BATCH_ID = BATCH_CNIC.BATCH_ID;
【问题讨论】:
-
ATTRIBUTE9 是 varchar2 列
-
如果我理解正确,您是说 ATTRIBUTE9 不是 CLOB 列。你确定吗?如果是,在引用的表中是否有任何 CLOB 类型的列?
-
是的,ATTRIBUTE9 不是 CLOB 列。引用表中有 CLOB 列,但在任何查询中都没有选择它们。如果您比较两个脚本,您会注意到我想分享的差异。
-
ATTRIBUTE9的大小是多少,数据库字符集是什么?我认为一个大字符串(例如varchar2(4000))可能会导致这种情况,如果字符集不同,并且在链接上为每个字符分配多个字节;它实际上变成了一个隐含的 CLOB。虽然我看到很久了,我会尝试挖掘一些东西。 -
ATTRIBUTE9 512 字节的大小,此列的大小无关紧要,因为我之前选择过此列,发现没有问题.. 当我将此列转换为日期类型时出现问题。