2013-07-18 5 views
17

Prima di tutto, questo non è un duplicato della domanda this. Se lo è, scusa ma non ho potuto risolvere il mio problema leggendolo.Errore ORA-00932 quando si utilizza una selezione con campi union e CLOB

sto ottenendo questo errore:

ORA-00932: inconsistent datatypes: expected - got CLOB 

Quando provo ad eseguire questa istruzione SELECT:

SELECT TXT.t_txt 
    FROM CITADM.tb_avu_txt_grc GR 
INNER JOIN CITADM.tb_avu_txt TXT 
    ON (GR.e_txt = TXT.e_txt and GR.u_txt = TXT.u_txt) 
WHERE TXT.u_lin_ord = 1 
UNION 
SELECT TXT.t_txt 
    FROM CITADM.tb_avu_txt_grc_cvd GRC 
INNER JOIN CITADM.tb_avu_txt TXT 
    ON (GRC.e_txt = TXT.e_txt and GRC.u_txt = TXT.u_txt) 
WHERE TXT.u_lin_ord = 2 

Il campo selezionato (t_txt) è del tipo di dati CLOB. Come puoi vedere, è la stessa colonna dello stesso tavolo. Questa affermazione appartiene a una più grande, ho isolato la parte in cui sto avendo questo problema.

Grazie mille.

+1

Prova 'UNION ALL' invece di' UNION'. –

risposta

29

Credo che il problema sia l'uso di UNION anziché UNION ALL. L'operatore UNION combina i due set ed elimina i duplicati. Poiché i tipi CLOB non possono essere confrontati, la parte di eliminazione dei duplicati non è possibile.

L'utilizzo di UNION ALL non tenterà di eseguire l'eliminazione dei duplicati (probabilmente non si hanno comunque duplicati), quindi dovrebbe funzionare.

+0

Ha funzionato! Grazie (: – gabsferreira

+0

vecchia domanda e risposta, ma questo ha funzionato per me oggi, grazie –

0

Poiché I aveva duplicati, non è possibile utilizzare UNION ALL. Questa soluzione funziona perfettamente, grazie!

BTW: Questa è l'unica risposta corretta, perché UNION ALL e UNION sono semanticamente differenti. Se non si dispone di duplicati, l'uso di UNION impone un sovraccarico di ordinamento non necessario.

+0

Questo dovrebbe essere un commento. –

Problemi correlati