Noms de tables Oracle : l'importance des guillemets
Une question fréquente dans la gestion des bases de données Oracle concerne l'utilisation de guillemets doubles autour des noms de tables. Bien qu'apparemment simple, comprendre leur fonction est crucial pour éviter les erreurs courantes.
Le comportement par défaut d'Oracle est la gestion des identifiants qui ne respecte pas la casse. Cela signifie que MyTable
, mytable
et MYTABLE
sont tous traités comme la même table. Cependant, mettre un nom de table entre guillemets change cela.
Les guillemets doubles appliquent le respect de la casse. "MyTable"
est distinct de "mytable"
ou "MYTABLE"
. S'il est créé avec des guillemets, le tableau doit être référencé avec exactement la même casse et les mêmes guillemets.
Considérez ces exemples :
<code class="language-sql">SELECT * FROM mytable WHERE id = 1; -- Works (case-insensitive)</code>
Cette requête réussit grâce à la correspondance insensible à la casse par défaut d'Oracle. Mais cela échoue :
<code class="language-sql">SELECT * FROM "mytable" WHERE id = 1; -- Fails (case-sensitive)</code>
Cette erreur se produit car "mytable"
a été défini comme étant sensible à la casse. La requête nécessite la majuscule et les guillemets exacts.
Oracle utilise en interne des comparaisons sensibles à la casse, mais il met en majuscule les identifiants non cités avant la comparaison. Citer contourne cela.
Créer un tableau avec des guillemets :
<code class="language-sql">CREATE TABLE "my_data"(col1 NUMBER, col2 VARCHAR2(255));</code>
Ces requêtes sont valides :
<code class="language-sql">SELECT * FROM "my_data"; SELECT * FROM "MY_DATA"; SELECT * FROM "My_Data";</code>
Cependant, cela échouera :
<code class="language-sql">SELECT * FROM my_data;</code>
À l'inverse, créer un tableau sans guillemets :
<code class="language-sql">CREATE TABLE my_other_data(col1 NUMBER, col2 VARCHAR2(255));</code>
Ces requêtes sont toutes incorrectes :
<code class="language-sql">SELECT * FROM My_Other_Data; SELECT * FROM "my_other_data"; SELECT * FROM "MY_OTHER_DATA";</code>
Seul cela fonctionne :
<code class="language-sql">SELECT * FROM my_other_data;</code>
Maîtriser la différence entre les identifiants sensibles à la casse (entre guillemets) et insensibles à la casse (non cités) et le rôle des guillemets doubles est essentiel pour une gestion efficace des bases de données Oracle et l'écriture de requêtes.
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!