Interface SQLLangages htes - PowerPoint PPT Presentation

1 / 35
About This Presentation
Title:

Interface SQLLangages htes

Description:

Deux approches: approche pr -compil e. approche compil e. Approche pr -compil e Embedded ... Deux approches: Approche pr -compil e. Approche compil e. Hala Skaf ... – PowerPoint PPT presentation

Number of Views:55
Avg rating:3.0/5.0
Slides: 36
Provided by: skaf
Category:

less

Transcript and Presenter's Notes

Title: Interface SQLLangages htes


1
Interface SQL-Langages hôtes
  • http//www.loria.fr/skaf/cours/sybase/sybase.html

2
Plan
  • Introduction
  • Deux approches
  • approche pré-compilée
  • approche compilée
  • Approche pré-compilée Embedded SQL de sybase
  • comment écrire un programme ESQL/C?
  • Synthèse
  • Bibliographies

3
Interface SQL-Langages hôtes
  • Pourquoi?
  • SQL tout seul est insuffisant pour écrire des
    applications complètes.
  • Ex application pour produire les factures, gérer
    les clients dune entreprise..
  • Problèmes
  • Impedance mismatch
  • Mariage des paradigmes

4
Problèmes
  • Impedance mismatch
  • SQL a ses propres types de données
  • le langage de programmation considéré (C, COBOL,
    ) a ses propres types
  • faire correspondre les deux ensembles de types.
  • Mariage des paradigmes
  • SQL est un langage déclaratif orienté ensemble
    (le résultat dune requête SQL est un ensemble)
  • les langages de programmation classiques sont de
    nature procédurale c.à.d. Orientés tuples ou
    un à la fois
  • faire appel à des structures itératives pour
    manipuler les ensembles résultants dune
    évaluation de requête.

5
Interface SQL-Langages hôtes
  • Deux approches
  • Approche pré-compilée
  • Approche compilée

6
Approche pré-compilée
Programme source dans le langage hôte, où les
instructions adressées au SGBD ont été
traduites dans le langage hôte
Programme source écrit dans le langage hôte
(C,Cobol, Java!) des instructions
(requêtes SQL) adressées au SGBD
Programme exécutable
précompilation
compilation édition de liens
  • Exemples
  • dans Oracle V6, PROC/C
  • dans Sybase V11, Embedded SQL (ESQL)

7
Approche compilée
Programme source écrit dans le langage hôte
(C,Cobol, Java!) des fonctions dune
bibliothèques permettant décrire des
instructions (requêtes SQL) adressées au SGBD
Programme exécutable
compilation édition de liens
  • Exemples
  • dans Oracle CLI (Callable Level Interface)
  • dans Sybase V11, DB_library\C

8
Approche pré-compilée Embedded SQL de sybase
  • Sybase Open Client Embedded SQL est un produit
    permettant à un programmeur d'utiliser de
    commandes Transact SQL dans un programme écrit
    dans un langage hôte tel que C ou Cobol.
  • Chaque commande Transact SQL est précédée par le
    mot clé exec sql et termine par
  • Exemple la table titles(title_id,title,price)
  • exec sql update titles set priceprice1.10

9
ESQL/C
exemple.cp

exemple.c
Open client Embedded SQL Precomplier
Programme ESQL
Programme C


Compilateur C
Code objet
Edition de lien
Programme exécutable
Open client client-library
10
Programmation avec ESQL/C
  • Chaque programme suit le schéma suivant
  • Inclusion de la zone de communication SQLCA
  • Déclaration des variables (globales ou locales)
  • Déclaration de gestion des erreurs
  • Connexion au(x) serveurs Sybase
  • Exécution des requêtes
  • Fermeture de la (des) connections
  • Gestion des erreurs

11
Inclusion de la zone de communication SQLCA
  • Chaque programme doit commencer par linclusion
    de la zone de communication SQLCA (SQL
    Communication Area).
  • exec sql include sqlca
  • sqlca est une structure de données permettant de
    gérer la communication (les messages) entre le
    serveur SQL et le programme.
  • Elle permet dinformer le programme sur létat
    dexécution de la dernière requête SQL.
  • Elle est remise à jour après lexécution de
    chaque commande Transact-SQL.

12
Description des variables de SQLCA
  • variable type description

Char long long long char long6 char
Sqlcaid sqlcabc sqlcode sqlrrm.sqlerrml sqlerr
p sqlerrd sqlerrm.sqlerrmc
Identificateur de la zone de communication. long
ueur de la structure SQLCA Contient les codes de
retours de chaque requête 0 tout va bien, -n
erreur n numéro derreur 100 plus des lignes
dans le résultat Longueur du message
derreur. Le programme qui a détecté
lerreur détail de lerreur ou du warning,
sqlerrd2 numéro des linges affectées message
derreurs .
13
Description des variables de SQLCA
  • variable type description

 W ,    pas de warning.  W , la
variable pour stocker le résultat est très
petit, le résultat a été tronqué.  W , une
valeur nulle est envoyée au serveur (dans un
contexte qui linterdit) nb de colonnes dune
dans un select gt nb de variables dans la partie
into. réservé erreur de conversion pendant
lexécution de reqte réservé réservé
sqlwarn0 sqlwarn1 sqlwarn2 sqlwarn3 sq
lwarn4 sqlwarn5 sqlwarn6 sqlwarn7
char char char char char char char char
14
Déclaration des variables
  • Variable-hôte désigne une variable déclarée
    dans un programme C et destinée à contenir des
    valeurs en provenance ou à destination du serveur
    SQL (de la base de données)
  • Les variables utilisées dans les requêtes sont
    définies dans une zone spéciale
  • Exemple
  • exec sql begin declare section
  • CS_char user31,passwd32 / variable du type
    ESQL/
  • int n / variables du type C/
  • char nom30
  • exec sql end declare section

15
Correspondance des types de ESQL/C varaibles
C long none charn none none ...
SQL serveur int none char datetime numérique
.
ESQL (Sybase-supplied typedef) CS_INT CS_VARCHA
R CS_CHAR CS_DATETIME CS_NUMERIC ...
Description 4-byte type entier variable-length
type caractère type caractère 8-byte type
datetime type numérique ...
16
Exemple
  • Soit la table titles(title_id,title,
    type,pub_id) /title_id est du type char5 /
  • exec sql begin declare section
  • CS_char id5 / le type CS_char est
    compatible avec le type char de Sybase/
  • exec sql end declare section
  • exec sql select title_id into id from titles
  • where pub_id 0736 and type business
  • Attention la syntaxe dutilisation de variables
    dans une clause Transact-SQL (nom_variable)

17
Déclaration de gestion des erreurs
  • exec sql whenever sqlwarningsqlerrornot found
    continuego to label call ma_fonction(param1,p
    aram2,.)stop
  • Exemples
  • Appel dune fonction pour traiter les erreurs
  • exec sql whenever sqlerror call erreur_p()
  • Appel dune fonction pour traiter les warning
  • exec sql whenever sqlwarning call warning_p()
  • / les fonctions erreur_p et warning_p sont
    définies par la suite /
  • Continue en cas de not found
  • exec sql whenever not found continue

18
Connexion au serveur
  • Syntaxe
  • exec sql connect usridentified by password
  • at connection_name using
    server
  • Exemple
  • strcpy(user,  "moi")
  • strcpy(passwd,"bd99")
  • exec sql connect user identified by passwd

19
Exécution des requêtes
  • Syntaxe exec sql SQL_expression
  • La plupart de SQL_expression respect la syntaxe
    de Transact-SQL de Sybase
  • Exemple
  • titles(title_id,title,price)
  • exec sql update titles set priceprice1.10
  • Sauf les requêtes de sélection qui peuvent avoir
    le mot clé into dans leur définition.
  • Exemple
  • exec sql select title_id into id from titles
  • where pub_id 0736 and type business

20
Requêtes de sélection
  • Où peut-on stocker le résultat dune requête ?
  • Deux cas possibles
  • Le résultat de la requête est une valeur.
  • Le résultat de la requête est une relation (un
    ensemble de valeurs )

21
Le résultat de la requête est une valeur
  • On peut utiliser des variables pour stocker le
    résultat de la requête.
  • Exemple
  • exec sql select title_id, title into id, titre
    from titles
  • where pub_id 0736 and type business
  • Attention
  • Le type de la variable id doit être compatible
    avec le type de la colonne title_id de la table
    titles.
  • Le type de la variable titre doit être compatible
    avec le type de la colonne title de la table
    titles

22
Le résultat de la requête est plusieurs lignes
  • Deux possibilités pour stocker le résultat
  • on peut utiliser une variable de type tableau ou
    array
  • on peut utiliser le curseur classique de Sybase.

23
Variable de type array
  • Applicable si on connaît le nombre maximal de
    lignes envoyées par le serveur SQL (nombre
    maximal des lignes dans le résultat)
  • Exemple
  • exec sql begin declare section
  • CS_CHAR titleid_array1006
  • exec sql end declare section
  • exec sql select title_id into titleid_array from
    titles

24
Exemple (suite)
  • Pour afficher le résultat de la requête
    précédante (exec sql select title_id into
    titleid_array from titles), il faut écrire
  • for (i o iltsqlca.sqlerrd2 i)
  • printf(title_id s\n,titleid_arrayi)

25
Utilisation des curseurs
  • Utile lorsquon ne connaît pas le nombre maximal
    des lignes envoyées par le serveur SQL.
  • Rappel Quest-ce que cest un curseur?
  • Un curseur est un nom symbolique associé à une
    instruction select Transact-SQL. Il se compose
  • dun ensemble (table) de lignes résultant de
    l'exécution d'une requête associée au curseur.
  • la position du curseur pointeur sur une ligne.

26
Rappel curseur de Sybase
  • A quoi ça sert?
  • à consulter les résultats de sa requête ligne par
    ligne.
  • Comment lutiliser?
  • Déclaration du curseur
  • declare curseur_nom cursor for select_expression
  • Ouverture du curseur
  • open curseur_nom
  • Parcours (extraire) des lignes
  • fetch curseur_nom into liste_variables
  • Fermeture
  • close curseur_nom

27
Les curseurs dans un programme ESQL/C
  • / Déclaration du curseur /
  • exec sql declare c1 cursor for
  • select title_id,title,pub_id,price
    from titles where pricegt10
  • / Ouverture du curseur /
  • exec sql open c1
  • / Pour chaque ligne /
  • for ()
  • / Récupérer les valeurs dans les varaibles id,
    pub_id, price/
  • exec sql fetch c1 into id, title, pub_id,
    price
  • if (sqlca.sqlcode 100)
  • break / Plus de lignes arrête la boucle /
  • printf ("ids, title s, pub_id d, price
    .2f\n",id,title,pub_id,price)
  • / Fermeture du curseur /
  • exec sql close c1

28
Fermeture de la connexion
  • Syntaxe
  • exec sql disconnect connection_nameallcurrent
  • Exemple
  • exec sql disconnect all
  • / Fermeture de toutes les connections aux
    serveurs /

29
Exemple complet (1) exemple1.cp
  • / definition de la zone de communication /
  • exec sql include sqlca
  • main()
  • / debut des declarations /
  • exec sql begin declare section
  • / Variable pour le login et le mot de passe /
  • CS_CHAR user31,passwd32
  • / fin des déclarations /
  • exec sql end declare section
  • / Detournement des erreurs provenant du serveur
    /
  • exec sql whenever sqlerror call err_p()
  • strcpy(user, "moi")
  • strcpy(passwd,"bdbdbd")
  • / Ouverture de la connexion /
  • exec sql connect user identified by
    passwd
  • / Requetes Transact SQL /
  • exec sql use Lice
  • exec sql update titles set priceprice1.10
  • exec sql commit work

30
Le fichier Makefile
  • INCLUDE -I. -ISYBASE/include
  • LIBFLAGS -LSYBASE/lib
  • CFLAGS (INCLUDE) (LIBFLAGS)
  • PRECOMP SYBASE/bin/cpre
  • all exemple1
  • exemple1 exemple1.c
  • gcc (CFLAGS) -o exemple1 SYBASE/include/sybes
    ql.c\
  • exemple1.c -lct -ltcl -lcomn -lcs -lintl
    -lsocket -lct
  • exemple1.c exemple1.cp
  • (PRECOMP) exemple1.cp

31
Requêtes dynamiques
  • Dans un programme ESQL, on peut écrire de
    requêtes dynamiques.
  • Une requête est dynamique si elle est construite
    de manière interactive à lexécution.
  • Il est possible de fournir des squelettes de
    requêtes au pré-compilateur, à compléter lors de
    lexécution..
  • Très utile dans le cas dun dialogue avec
    lutilisateur.
  • Dynamique SQL fait partie du standard
    ANSI /ISO SQL2.

32
Exemple dutilisation de Dynamique SQL
  • Lors dune interrogation, on peut spécifier les
    critères de sélection
  • select from titles where type ? and
    price between ? and ?
  • ("?") est un paramètre dynamique
  • ("?") représentent les places où lutilisateur
    peut entrer les valeurs de recherche..

33
Méthodes de Dynamique SQL
  • Méthode 1 execute immediate
  • Méthode 2 prepare and execute
  • Méthode 3 prepare and fetch
  • Méthode 4 prepare and fetch with
  • A détailler

34
Synthèse de lapproche pré-compilée de Sybase
  • Approche simple (conceptuellement)
  • permet daccéder à une base de données à partir
    d une application écrit dans un langage de
    programmation (ici C) de manière simple.
  • ESQL est un standard ANSI/ISO
  • Inconvénients ??

35
Bibliographies
  • La documentation de sybase
  • Open Client Embedded SQL/C Programmers Guide
  • Embedded SQL Reference Manual
  • doc en ligne
  • http//sybooks.sybase.com/onlinebooks/group-cn/cng
    1110e/esqlc
  • Embedded SQL/C sample programs
  • http//techinfo.sybase.com/css/techinfo.nsf/DocID/
    ID20376
Write a Comment
User Comments (0)
About PowerShow.com