预期得到 CLOB 数据类型

Expected-Got CLOB datatype

我陷入了一个问题,我不知道该怎么做。在我的 table 中,我有列类型 CLOB,在我的 SELECT 中,我使用了此列,但我无法从 select 语句中删除。

我尝试以某种方式将其更改为 VARCHAR(255),但我的 table 包含数据和备份 table 并且再次恢复需要时间。到目前为止,这是我的 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

这给出了错误:

ERROR at line 1:
ORA-00932: inconsistent datatypes: expected - got clob

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

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

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

或者看起来您可以完全取消 UNION,通过 re-writing 您的查询如下:

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  

这种方法可能更有效。