SQL embarqué

Embedded SQL ( anglais pour Embedded SQL , en abrégé ESQL ) standardise la syntaxe d'insertion de commandes SQL dans les langages de programmation. L'imbrication en Ada , C , C++ , COBOL , Fortran , MUMPS , Pascal et PL/I est en Part 2 Foundation (SQL / Foundation) et l'encastrement en Java en Part 10 Object Language Bindings ( SQL / OLB ) du Norme SQL ISO / IEC 9075 spécifiée.

description technique

Les instructions ESQL sont insérées dans la séquence des instructions régulières du langage de programmation (= langage hôte). Un précompilateur convertit les instructions ESQL en code de langage hôte normal, qui est ensuite traduit avec son compilateur . (Certains compilateurs COBOL contiennent un précompilateur ESQL intégré.) Le code converti contient des appels à l' interface vers la base de données . Cette interface doit être liée en tant que bibliothèque dans le programme fini . La bibliothèque dépend de la base de données utilisée et est généralement fournie par le fabricant de la base de données respective.

Comme ESQL est standardisé, les programmes avec ESQL - tant qu'aucune propriété propriétaire du dialecte SQL respectif n'est utilisé - devraient être compatibles avec les bases de données de différents fabricants, mais uniquement au niveau du code source . Cela signifie que lorsque la marque de la base de données change, parfois même lorsque la version de la même base de données est mise à jour, le code source doit être recompilé par le précompilateur et le compilateur ESQL et lié à la bibliothèque actuelle. Cela distingue ESQL des concepts ayant un objectif similaire tels que ODBC ou JDBC , où lors du changement de base de données (en théorie), un seul pilote est modifié et le programme compilé peut continuer à être utilisé. Cependant, il existe au moins un compilateur COBOL qui convertit les instructions ESQL en appels à ODBC.

L'avantage de cette approche de la connexion à la base de données est qu'au moment de la compilation, non seulement la syntaxe SQL mais également la compatibilité de type des variables d'interface peuvent être vérifiées par rapport aux types de données du système de base de données. Les architectures liées à l'exécution telles que ODBC , JDBC , ADO ou ADO.NET ne peuvent pas effectuer de vérification de type.

syntaxe

Les instructions ESQL sont constituées de :

EXEC SQL <sql-statement> <terminator>   für Nicht-Java
#sql { <sql-statement> };               für Java
 

z. B. COBOL :

EXEC SQL <sql-statement> END-EXEC.
 

z. B.C, C++, Ada :

EXEC SQL <sql-statement>;
 

la programmation

La communication entre SQL et le programme d'application s'effectue via des variables de programme. Si ces variables de programme sont utilisées dans une expression SQL, elles sont précédées de deux points.

Exemple:

EXEC SQL
SELECT vorname, nachname
INTO :vorname, :nachname
FROM mitarbeitertabelle
WHERE pnr = :pnr
;

Avant d'exécuter la commande SQL, la variable 'pnr' doit recevoir une valeur dans le langage de programmation environnant. Après l'exécution de la commande SQL, les variables « prénom » et « nom » reçoivent des valeurs - si un enregistrement a été trouvé.

Des colonnes avec des Nullvaleurs peuvent être définies dans une table de base de données . Dans la plupart des langages de programmation, les variables ne peuvent pas recevoir de Nullvaleurs, mais une variable reçoit toujours une valeur.

Si des colonnes de tableau Nullcontenant également des valeurs doivent être consultées, des variables indicatrices doivent être utilisées. Ils doivent être créés du type int. Cette variable est définie sur une valeur inférieure à 0 si la colonne est dans la base de données Null.

Exemple:

EXEC SQL
SELECT vorname, nachname
INTO :vorname :i_vorname, :nachname :i_nachname
FROM mitarbeitertabelle
WHERE pnr = :pnr
;

Les variables 'prénom' et 'nom' sont utilisées ici - comme dans l'exemple ci-dessus - pour enregistrer les valeurs lues. De plus, les variables indicatrices 'i_first name' et 'i_lastname' indiquent si le prénom et le nom étaient même disponibles. Si z. Par exemple, si seul le nom de famille a été enregistré et que le prénom était inconnu ( Null), alors 'i_lastname' a été attribué 0 et 'i_first name' a été attribué -1.

Voir également

Littérature

  • ISO 9075 Partie 1 : Cadre . 2e édition. ISO / CEI, 2003 ( web.archive.org [PDF; 582 Ko ; consulté le 24 août 2021] numéro de référence : 9075-1 : 2003 (E), sections : 4.8.1, 5.3.3.1).
  • ISO 9075 Partie 2 : Fondation . 2e édition. ISO / CEI, 2003 ( web.archive.org [PDF; 139 Ko ; Récupéré le 24 août 2021] Référence : 9075-2 : 2003 (E), Chapitre : 20 Embedded SQL).
  • ISO 9075 Partie 3 : Interface de niveau d'appel . 3. Édition. ISO / IEC, 2003 (numéro de référence : 9075-3 : 2003 (E), Annexe B.1 (exemples de traduction d'Embedded SQL vers des appels de fonction de bibliothèque de bas niveau)).

liens web