预期的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

任何建议和评论,以消除这种错误

解决方法

由于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  

这种方法可能更有效。