首页 > 解决方案 > 预期获得的 CLOB 数据类型

问题描述

我陷入了一个问题,我不知道该怎么办。在我的表中,我的列类型为 CLOB,而在我的表中,SELECT我使用此列,并且无法从 select 语句中删除。

不知何故,我尝试将其更改为 VARCHAR(255) 但我的表包含数据和备份表,并且再次恢复将花费我时间。到目前为止,这是我的 SELECT 查询:

SELECT * FROM 
   (SELECT a.*,
           df.Name AS PaymentTypeName 
    FROM  ata a 
    INNER JOIN debitform df ON a.PaymentType = df.Id 
    WHERE a.Deviation = '1' 
    AND a.ProjectID = 141 
    AND a.ParentAta = '0' 
    AND TYPE = 1 
    UNION 
    SELECT a.*,  
           df.Name AS PaymentTypeName 
    FROM  ata a 
    INNER JOIN debitform df ON a.PaymentType = df.Id 
    WHERE a.Deviation = '1' 
    AND a.ProjectID = 141 
    AND a.ParentAta = '0' 
    AND TYPE = 0 
    AND a.BecomeExternalAtaFromInternal = 1) a

这给出了错误:

第 1 行的错误:
ORA-00932:不一致的数据类型:预期 - 得到 clob

任何建议和评论如何消除此类错误。

标签: sqloracleset-operations

解决方案


由于 UNION 子句,您会收到此错误。UNION 实现了不同的排序操作,而我们不能在 CLOB 上执行这些操作。

最简单的选择是更改为 UNION ALL。从理论上讲,这可能会将重复项引入最终结果集中,尽管考虑到每个子查询的 WHERE 标准,这似乎不太可能。

或者,您可以通过像这样重写查询来完全取消 UNION:

SELECT * FROM 
   (SELECT a.*,
           df.Name AS PaymentTypeName 
    FROM  ata a 
    INNER JOIN debitform df ON a.PaymentType = df.Id 
    WHERE a.Deviation = '1' 
    AND a.ProjectID = 141 
    AND a.ParentAta = '0' 
    AND (TYPE = 1 
         OR (TYPE = 0 
             AND a.BecomeExternalAtaFromInternal = 1)
        )
    )a  

这种方法可能更有效。


推荐阅读