Comment utiliser SQL embarqué

La méthode la plus courante de mélange SQL avec les langages procéduraux est appelé intégré

Sommaire

SQL. Vous vous demandez comment intégré fonctionne SQL? Prenez un regard sur le nom et vous avez les bases vers le bas: Baisse des instructions SQL dans le milieu d'un programme procédural, où vous en avez besoin.

Bien sûr, comme vous pouvez vous attendre, une instruction SQL qui apparaît soudainement au milieu d'un programme de C peut présenter un défi pour un compilateur qui ne s'y attend pas. Pour cette raison, les programmes contenant du SQL imbriqué sont généralement passés à travers un préprocesseur avant d'être compilé ou interprété. La EXEC SQL directive met en garde le préprocesseur de l'apparition imminente de code SQL.

Comme un exemple de SQL embarqué, regarder un programme écrit en Pro * C version Oracle de la langue C. Le programme, qui accède à une entreprise de EMPLOYÉ table, invite l'utilisateur à un nom de l'employé, puis affiche le salaire et de la Commission de l'employé. Il invite alors l'utilisateur pour les nouveaux salaires et des données de la Commission - et met à jour la table des employés avec elle:

EXEC SQL BEGIN DECLARE SECTION-VARCHAR uid [20] -VARCHAR pwd [20] -VARCHAR ename [10] salaire -FLOAT, comm-COURT salary_ind, comm_ind-EXEC SQL END DECLARE SECTION-main () {int sret- / * scanf code de retour * // * Se connecter * / strcpy (uid.arr, "Fred") - / * copier le nom d'utilisateur * / uid.len = strlen (uid.arr) -strcpy (pwd.arr, "tour") - / * copier le mot de passe * / pwd.len = strlen (pwd.arr) SQL exec CHAQUE FOIS SQLERROR STOP-EXEC SQL WHENEVER NOT FOUND STOP-EXEC SQL CONNECT: uid-printf ("Connecté à l'utilisateur: les pourcentages n", uid.arr) -printf ("Entrez le nom de l'employé de mettre à jour:") -scanf ("pourcentages", ename.arr) -ename.len = strlen (ename.arr) -exec SQL SELECT SALAIRE, COMM EN: salaire ,: commFROM EMPLOYWHERE ENAME =: ename-printf ("employés: salaire pourcentages: percent6.2f comm: percent6.2f n", ename.arr, salaire, comm) -printf ("Entrez le nouveau salaire:") -sret = scanf ( "percentf", salaire) -salary_ind = 0-si (SRET == EOF !! SRET == 0) / * définir indicateur * / salary_ind = -1- / * Définir indicateur NULL * / printf (“ Entrez nouvelle Commission: “) - SRET = scanf ("percentf", comm) -comm_ind = 0- / * définir indicateur * / if (SRET == EOF !! SRET == 0) comm_ind = -1- / * indicateur Set pour NULL * / EXEC SQL UPDATE EMPLOYSET SALAIRE =: salaire: salary_indSET COMM =: comm: comm_indWHERE ENAME =: ename-printf (". pourcentages des employés mis à jour n", ename.arr) -exec SQL COMMIT WORK-sortie (0) -}

Vous ne devez pas être un expert en C pour comprendre l'essence de ce que ce programme est en train de faire (et comment il a l'intention de le faire). Voici un aperçu de l'ordre dans lequel les déclarations exécuter:

  1. SQL déclare variables hôtes.

  2. Code C contrôle la procédure de connexion utilisateur.




  3. SQL met en place la gestion des erreurs et se connecte à la base de données.

  4. Code C sollicite un nom de l'employé de l'utilisateur et le place dans une variable.

  5. Un SQL SELECT instruction récupère les données pour le salaire et de la Commission de l'employé nommé, et la déclaration stocke les données dans les variables d'accueil : salaire et : comm.

  6. C prend alors à nouveau et affiche le nom, le salaire et la commission de l'employé, puis sollicite de nouvelles valeurs pour salaire et commissions. Il vérifie également pour voir si une entrée a été faite, et si l'on n'a pas, il définit un indicateur.

  7. SQL met à jour la base de données avec les nouvelles valeurs.

  8. C affiche alors une Opération complète message.

  9. SQL valide la transaction, et C sort enfin le programme.

Vous pouvez mélanger les commandes de deux langues comme cela parce que du préprocesseur. Le préprocesseur sépare les instructions SQL des commandes de langage hôte, en plaçant les instructions SQL dans une routine externe distinct. Chaque instruction SQL est remplacé par un langage hôte APPEL de la routine externe correspondant. Le compilateur de langage peut maintenant faire son travail.

La façon dont la partie SQL est transmis à la base de données dépend de la mise en œuvre. Vous, en tant que développeur de l'application, ne pas avoir à vous soucier de tout cela. Le préprocesseur prend soin d'elle. Tu devrait être préoccupé par un certain nombre de choses, cependant, qui ne figurent pas dans SQL interactive - des choses telles que les variables d'accueil et les types de données incompatibles.

Les variables hôte

Certaines informations doivent être transmises entre le programme de la langue d'accueil et les segments de SQL. Vous passez ces données avec accueillir des variables. Pour SQL à reconnaître les variables d'accueil, vous devez les déclarer avant de les utiliser. Déclarations sont inclus dans un segment de déclaration qui précède le segment de programme. Le segment de la déclaration est annoncé par la directive suivante:

EXEC SQL BEGIN DECLARE SECTION -

La fin du segment de déclaration est signalé par cette ligne:

EXEC SQL END DECLARE SECTION -

Chaque instruction SQL doit être précédée par une EXEC Directive SQL. La fin d'un segment de SQL peut ou non être signalé par une directive de terminaison. En COBOL, la directive est de terminaison “ END-EXEC ”, et C, il est un point-virgule.

Convertir les types de données

Selon la compatibilité des types de données pris en charge par le langage hôte et celles financées par SQL, vous pourriez avoir à utiliser CAST à convertir certains types. Vous pouvez utiliser des variables d'accueil qui ont été déclarés dans le DECLARE SECTION. Rappelez-vous de faire précéder les noms de variables hôte avec un colon (:) Lorsque vous les utilisez dans les états SQL, comme dans l'exemple suivant:

INSERT INTO FOODS (FOODNAME, calories, protéines, lipides, glucides) VALUES (: foodname,: calories,: protéines,: la graisse,: carbo) -

» » » » Comment utiliser SQL embarqué