Maison >base de données >tutoriel mysql >Pourquoi ma requête de jointure Oracle SQL renvoie-t-elle ORA-00904 : Identifiant invalide ?

Pourquoi ma requête de jointure Oracle SQL renvoie-t-elle ORA-00904 : Identifiant invalide ?

Susan Sarandon
Susan Sarandonoriginal
2025-01-17 08:52:11285parcourir

Why is my Oracle SQL join query returning ORA-00904: Invalid Identifier?

Dépannage ORA-00904 : identifiant non valide dans les jointures Oracle SQL

Les requêtes de jointure Oracle SQL peuvent parfois générer l'erreur ORA-00904: invalid identifier. Cette erreur signifie un problème avec les identifiants (noms de table ou de colonne) utilisés dans votre requête.

Cause fondamentale :

Cette erreur résulte généralement du référencement d’objets de base de données inexistants ou mal identifiés. Les coupables courants incluent les fautes de frappe dans les noms de tables ou de colonnes, ou l'utilisation d'une casse incorrecte.

Exemple illustratif :

Considérez cette requête :

<code class="language-sql">SELECT Employee.EMPLID as EmpID, 
       Employee.FIRST_NAME AS Name,
       Team.DEPARTMENT_CODE AS TeamID, 
       Team.Department_Name AS teamname
FROM PS_TBL_EMPLOYEE_DETAILS Employee
INNER JOIN PS_TBL_DEPARTMENT_DETAILS Team 
ON Team.DEPARTMENT_CODE = Employee.DEPTID;</code>

Cette requête peut produire l'erreur ORA-00904 car « Équipe » est placé entre guillemets doubles. Oracle traite les identifiants entre guillemets comme étant sensibles à la casse. Ainsi, "Team.DEPARTMENT_CODE" diffère de "team.DEPARTMENT_CODE".

Résolution :

Pour résoudre ce problème, vérifiez tous les identifiants de votre requête par rapport au schéma de base de données réel. Portez une attention particulière à l'orthographe, aux majuscules et à la présence de guillemets doubles inutiles. Oracle n'est pas sensible à la casse par défaut, sauf si vous utilisez des guillemets doubles.

La version corrigée de l'exemple de requête serait :

<code class="language-sql">SELECT Employee.EMPLID as EmpID, 
       Employee.FIRST_NAME AS Name,
       Team.DEPARTMENT_CODE AS TeamID, 
       Team.Department_Name AS teamname
FROM PS_TBL_EMPLOYEE_DETAILS Employee
INNER JOIN PS_TBL_DEPARTMENT_DETAILS Team 
ON Team.DEPARTMENT_CODE = Employee.DEPTID;</code>

(Remarque : bien que l'exemple ne montre aucune différence apparente, l'original pourrait avoir une incompatibilité de casse dans le schéma de base de données qui n'est pas visible ici. Vérifiez toujours les noms d'objets de votre base de données.) Suppression Les guillemets inutiles sont également une étape clé.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn