web-dev-qa-db-fra.com

Erreur ORA-00932 lors de l'utilisation d'une sélection avec des champs union et CLOB

Tout d’abord, ce n’est pas une copie de this question. Si c'est le cas, désolé mais je ne pourrais pas résoudre mon problème en le lisant.

Je reçois cette erreur:

ORA-00932: inconsistent datatypes: expected - got CLOB

Lorsque j'essaie d'exécuter cette instruction 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

Le champ sélectionné (t_txt) est de type de données CLOB. Comme vous pouvez le voir, c'est la même colonne du même tableau. Cette déclaration appartient à une plus grande, j'ai isolé la partie où j'ai ce problème.

Merci beaucoup.

21
gabsferreira

Je crois que le problème est l'utilisation de UNION au lieu de UNION ALL. L'opérateur UNION combinera les deux ensembles et éliminera les doublons . Étant donné que les types CLOB ne peuvent pas être comparés, la partie élimination des doublons n’est pas possible. 

Utiliser UNION ALL ne tentera pas de supprimer les doublons (vous n’avez probablement pas de doublons de toute façon), donc cela devrait fonctionner.

38
Eric Petroelje

Comme je j'avais des doublons, je ne pouvais pas utiliser UNION ALL. Cette solution fonctionne parfaitement, merci!

BTW: C'est à mon sens la seule réponse correcte, car UNION ALL et UNION sont sémantiquement différents. Si vous n'avez pas du tout de doublons, utiliser UNION impose une surcharge de tri inutile.

0
Friedrich