Oracle
 sql >> Base de données >  >> RDS >> Oracle

Correction de l'erreur "ORA-01790 :l'expression doit avoir le même type de données que l'expression correspondante"

Si vous obtenez l'erreur "ORA-01790 :l'expression doit avoir le même type de données que l'expression correspondante" dans Oracle Database, c'est probablement parce que vous utilisez un opérateur tel que UNION , INTERSECT , ou EXCEPT pour exécuter une requête composée, mais les colonnes renvoyées par chaque requête utilisent des groupes de types de données différents.

Pour résoudre ce problème, vous devez vous assurer que chaque colonne renvoyée par la deuxième requête utilise le même groupe de types de données que la colonne correspondante dans la première requête.

Exemple d'erreur

Voici un exemple de code qui génère cette erreur :

SELECT TeacherName FROM Teachers
UNION
SELECT StudentId FROM Students;

Résultat :

ORA-01790: expression must have same datatype as corresponding expression

Le problème ici, c'est que j'essaie de combiner le TeacherName colonne dans la première requête, avec le StudentId colonne dans la deuxième requête.

Dans mon cas, le TeacherName la colonne est un varchar(50) mais le StudentId la colonne est un int colonne. Cela provoque l'erreur.

Solution 1

La première solution (et probablement la plus courante) à l'erreur ci-dessus consiste à s'assurer que nous avons la ou les bonnes colonnes dans chaque requête.

Dans mon cas, il semble assez évident que j'ai passé les mauvaises colonnes. Par conséquent, je peux modifier la requête ci-dessus comme suit :

SELECT TeacherName FROM Teachers
UNION
SELECT StudentName FROM Students;

Résultat :

NOM DE L'ENSEIGNANT
Ben
Facture
Cathy
Ein
Faye
Jet
Pointe
Warren

Ou je pourrais faire ce qui suit :

SELECT TeacherId, TeacherName FROM Teachers
UNION
SELECT StudentId, StudentName FROM Students;

Résultat :

TEACHERID NOM DE L'ENSEIGNANT
1 Faye
1 Warren
2 Ben
2 Jet
3 Cathy
3 Pointe
4 Cathy
4 Ein
5 Facture
5 Warren
6 Facture

Dans les deux cas, les types de colonne renvoyés par la deuxième requête correspondaient aux types renvoyés par la première requête.

Solution 2

Dans certains cas, vous pouvez constater que vous avez les bonnes colonnes, mais leurs types ne correspondent pas. Dans de tels cas, vous devrez peut-être convertir l'une des colonnes en un type de données différent.

En utilisant notre exemple, nous pourrions faire ceci :

SELECT TeacherName FROM Teachers
UNION
SELECT TO_CHAR(StudentId) FROM Students;

Résultat :

NOM DE L'ENSEIGNANT
1
2
3
4
5
6
Ben
Facture
Cathy
Warren

Ce n'est probablement pas le meilleur exemple, car il combine des noms avec des identifiants, mais je suis sûr que vous avez compris. Nous avons pu éviter l'erreur en utilisant le TO_CHAR(number) fonction pour convertir le StudentId colonne en un char saisir.