2011-02-16 3 views
2

J'utilise la requête suivante dans ma base de données ORACLE (10g).Erreur Oracle: types de données incohérents

SELECT * de student_table où student_no comme '% STUDENT%' INTERSECT SELECT * de student_table où student_no dans ('STUDENT1234', 'STUDENT5678')

je me suis erreur comme: java. sql.SQLSyntaxErrorException: ORA-00932: types de données incohérents: expected - got CLOB

Toute idée de résolution de cette erreur?

+2

Vous êtes conscients que, malgré l'erreur, l'intersection de ces deux ne sera que le résultat de la deuxième requête, n'est-ce pas? Au moins je le pense. Je peux me tromper, ce ne serait pas la première fois :-) – paxdiablo

+0

@paxdiablo: Vous avez raison. Si les comparaisons ou les chaînes étaient différentes, cela pourrait être fait avec un "AND" dans la clause where au lieu d'un INTERSECT. – redcayuga

Répondre

4

Je suppose que student_table contient au moins une colonne avec le type de données clob.

Vous ne devez pas alors select *, mais uniquement les colonnes non-clob.

1

Vous ne pouvez pas effectuer d'INTERSECT lorsque le jeu de résultats inclut un objet LOB.

Dans ce cas, cependant, vous n'avez pas besoin de toute façon Intersection:

SELECT * from student_table 
where student_no like '%STUDENT%' 
and student_no in ('STUDENT1234','STUDENT5678'); 

Et, comme l'a souligné plus haut, la première condition est de toute façon redondante dans ce cas particulier:

SELECT * from student_table where student_no in ('STUDENT1234','STUDENT5678'); 
Questions connexes