Choix d’une grammaire SQL
La première décision à prendre lors de la construction d’instructions SQL est la grammaire à utiliser. En plus des grammaires disponibles à partir des différents organismes de normes, tels que Open Group, ANSI et ISO, pratiquement chaque fournisseur SGBD définit sa propre grammaire, chacune d’entre elles varie légèrement par rapport à la norme.
Annexe C : Grammaire SQL, décrit la grammaire SQL minimale que tous les pilotes ODBC doivent prendre en charge. Cette grammaire est un sous-ensemble du niveau d’entrée de SQL-92. Les pilotes peuvent prendre en charge une grammaire supplémentaire pour se conformer aux niveaux intermédiaires, complets ou FIPS 127-2 transitionnels définis par SQL-92. Pour plus d’informations, consultez La grammaire minimale SQL dans l’annexe C : Grammaire SQL et SQL-92.
L’annexe C définit également des séquences d’échappement contenant une grammaire standard pour les fonctionnalités de langage couramment disponibles, telles que les jointures externes, qui ne sont pas couvertes par la grammaire SQL-92. Pour plus d’informations, consultez séquences d’échappement ODBC dans l’annexe C : grammaire SQL et séquences d’échappement, plus loin dans cette section.
La grammaire choisie affecte la façon dont le pilote traite l’instruction. Les pilotes doivent modifier SQL-92 SQL et les séquences d’échappement définies par ODBC en SQL spécifique au SGBD. Étant donné que la plupart des grammaires SQL sont basées sur une ou plusieurs des différentes normes, la plupart des pilotes ne font que peu ou pas de travail pour répondre à cette exigence. Il se compose souvent uniquement de la recherche des séquences d’échappement définies par ODBC et de les remplacer par une grammaire spécifique au SGBD. Lorsqu’un pilote rencontre une grammaire qu’il ne reconnaît pas, il suppose que la grammaire est spécifique au SGBD et transmet l’instruction SQL sans modification à la source de données pour l’exécution.
Par conséquent, il existe vraiment deux choix de grammaire à utiliser : la grammaire SQL-92 (et les séquences d’échappement ODBC) et une grammaire spécifique au SGBD. Parmi les deux, seule la grammaire SQL-92 est interopérable, donc toutes les applications interopérables doivent l’utiliser. Les applications qui ne sont pas interopérables peuvent utiliser la grammaire SQL-92 ou une grammaire spécifique au SGBD. Les grammaires spécifiques au SGBD présentent deux avantages : elles peuvent exploiter toutes les fonctionnalités non couvertes par SQL-92 et elles sont légèrement plus rapides, car le pilote n’a pas à les modifier. Cette dernière fonctionnalité peut être partiellement appliquée en définissant l’attribut d’instruction SQL_ATTR_NOSCAN, ce qui empêche le pilote de rechercher et de remplacer des séquences d’échappement.
Si la grammaire SQL-92 est utilisée, l’application peut découvrir comment elle est modifiée par le pilote en appelant SQLNativeSql. Cela est souvent utile lors du débogage d’applications. SQLNativeSql accepte une instruction SQL et la retourne une fois que le pilote l’a modifié. Étant donné que cette fonction se trouve dans le niveau de conformité de l’interface core, elle est prise en charge par tous les pilotes.