2017-04-26 221 views
1

我開始了一個查詢這樣:ORA-00932(不一致的數據類型:預期 - 有CLOB)的錯誤,我不明白

SELECT A.* 
     FROM TABLE_A A 
INNER JOIN TABLE_B B 
     ON A.YEAR = B.YEAR 
    WHERE A.ID IN (SELECT ID FROM TABLE_B) 

上述查詢給我重複的記錄,所以我增加了DISTINCT關鍵字爲這樣:

SELECT DISTINCT A.* 
     FROM TABLE_A A 
INNER JOIN TABLE_B B 
     ON A.YEAR = B.YEAR 
    WHERE A.ID IN (SELECT ID FROM TABLE_B) 

這第二個查詢給了我以下錯誤:

ORA-00932: inconsistent datatypes: expected - got CLOB

  1. 00000 - "inconsistent datatypes: expected %s got %s"

我終於糾正了查詢,並通過WHERE子句中移動狀態的INNER JOIN這樣消除了重複記錄:

SELECT A.* 
     FROM TABLE_A A 
INNER JOIN TABLE_B B 
     ON A.YEAR = B.YEAR 
     AND A.ID = B.ID 

我只是不明白,爲什麼第二個查詢沒有工作。爲什麼在這裏添加DISTINCT關鍵字突然出現問題?

回答

2

這不是一個特別enlightning錯誤信息,但它是因爲the restrictions on LOBs,其中有:

  • You cannot specify LOB columns in the ORDER BY clause of a query, the GROUP BY clause of a query, or an aggregate function.

  • You cannot specify a LOB column in a SELECT... DISTINCT or SELECT... UNIQUE statement or in a join. However, you can specify a LOB attribute of an object type column in a SELECT... DISTINCT statement, a query that uses the UNION, or a MINUS set operator if the object type of the column has a MAP or ORDER function defined on it.

你打的人的第二位,但首先從時間中出現時,以一次來這裏了。

您可以假冒的東西,如同樣的情況:

SQL> select distinct col from (select to_clob('test') as col from dual); 

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

您將能夠使用distinct如果上市,而不是使用A.*,這是包括table_a CLOB列只非CLOB列, 。

You can work around this,但糾正查詢以消除重複是正確的做法。必須將distinct添加到查詢中通常表示有問題,並且您正在修復症狀而不是原因。

+0

感謝您的參考,我期待着不僅僅是在編寫SQL時深入Oracle。 – Jake

相關問題