问题描述
我陷入一个问题,不知道该怎么办。在我的表中,我的列类型为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
这种方法可能更有效。