Bases de données avancées PL/pgSQL

Dimension: px
Commencer à balayer dès la page:

Download "Bases de données avancées PL/pgSQL"

Transcription

1 Bases de données avancées PL/pgSQL Wies law Zielonka 19 mars 2015 Table des matières 1 Bloc de code 2 2 Déclaration de et initialisation de variables 2 3 Noms de variables. Les types %TYPE et %ROWTYPE 3 4 Noms de paramètres 4 5 IF et CASE IF CASE Plusieurs fonctions avec le même nom 6 7 Boucles Boucles et sortie d une boucle avec EXIT Boucles WHILE Boucles FOR, CONTINUE SELECT... INTO et la variable FOUND 9 9 Boucle FOR sur les résultats de SELECT Paramètres OUT Fonctions avec les types polymorphes Fonctions avec des types composés Les fonction retournant des tables RETURNS SETOF RETURNS TABLE Ajouter des éléments dans la table de résultats : RETURN QUERY et RETURN NEXT Exécuter le code SQL à l intérieur d une fonction EXECUTE pour exécuter les requêtes dynamiques Requête dynamiques dans une boucle FOR. 16 1

2 17 Utilisation de curseur Curseur liés à une requête FETCH MOVE OPEN/CLOSE Retourner le curseur Boucler sur le résultats d un curseur Curseur non liés Afficher des messages, lancer une exception 21 Résumé Ces notes ne sont pas corrigées (cela concerne surtout la qualité du français, le code a été vérifié). Mais peut-être vous les trouverez quand même utile pour préparer l examen ou projet. Ne pas distribuer. Les avantages de l utilisation PL/pgSQL : vitesse - code compilé une fois réside sur le serveur. 1 Bloc de code Le code est Structuré en bloc de code : [ <<label>> ] statements statements END En particulier le corps d une fonction est un bloc de code. 2 Déclaration de et initialisation de variables name [ CONSTANT ] type [ NOT NULL ] [ {DEFAULT := } value] CONSTANT variable non modifiable (read only), NOT NULL par défaut les variables initialisées avec la valeur NULL, Une fonction qui calcule la somme de ses deux arguement : add.sql CREATE FUNCTION add(integer, integer) RETURNS INTEGER AS $$ q INTEGER := 0; q := $1+$2; RETURN q; END $$ LANGUAGE plpgsql; Si on suppose qu une table tab possède des colonnes a, b, en utilisant cette fonction on pourra faire la requête SELECT sum(a,b) from tab; qui est équivalent select a+b from tab; 2

3 3 Noms de variables. Les types %TYPE et %ROWTYPE Pour plus de souplesse on peut déclarer de variables du même type que le type d un attribut ou un type d une table : nom_table.nom_colonne%type nom_de_table%rowtype On rappelle que est l opérateur de concaténation en SQL. La construction expression::type permet de faire un cast et changer le type d une expression concat.sql CREATE OR REPLACE FUNCTION concat(ingredients) RETURNS TEXT AS $$ a ingredients.name%type; b ingredients.unit%type; c ALIAS FOR $1; -- creation d un nom alias pour le parametre $1 x text; a := c.name; b := c.unit; x := (a )::CHAR(30) ; x := x b; RETURN x ; END -- Maintenant o peut faire -- SELECT concat(ingredients) FROM ingredients; -- ou -- SELECT concat(ingredients.*) FROM ingredients; -- Par contre SELECT concat(ingredients); ne marche pas CREATE OR REPLACE FUNCTION concat(a ingredients.name%type, b ingredients.unit%type) RETURNS TEXT AS $$ x text; x := a::char(30); x := x b; RETURN x ; END --select concat(name,units) from ingredients; changer_prix CREATE OR REPLACE FUNCTION changer_prix(f items.price%type, combien REAL ) RETURNS items.price%type AS toto items%rowtype; prix items.price%type DEFAULT 0; prix := f * combien; RETURN prix; END LANGUAGE plpgsql ;

4 select changer_prix(price,1.7),price FROM items WHERE price IS NOT NULL; 4 Noms de paramètres Les paramètres d une fonction sont nommés $1, $2,... etc. On peut donner les noms avec ALIAS et les renommer avec RENAME. nom ALIAS FOR old_name RENAME old_name TO new_name; Utile si les variable NEW et OLD dans les triggers. A noter que c est une déclaration alors à mettre dans addnumbers CREATE OR REPLACE FUNCTION addnumbers(integer, INTEGER) RETURNS INTEGER AS $$ Number_1 ALIAS FOR $1; Number_2 ALIAS FOR $2; RENAME $1 TO Orig_Number; RETURN Orig_Number + Number_2; $$ LANGUAGE plpgsql; Les paramètres peuvent être utilisés uniquement pour passer des données, jamais pour passer les noms de tables. Par exemple INSERT INTO mytable VALUES ($1); est correct mais INSERT INTO $1 VALUES (42); ne l est pas. 5 IF et CASE 5.1 IF IF condition THEN instructions [ ELSIF condition THEN instructions ] [ ELSIF condition THEN instructions ] [ ELSE instructions ] END IF; On peut faire de fonctions récursives, la fonction suivante calcule le factoriel my f actoriel(n) = n. Noter aussi l utilisation d un bloc interne avec son propre......end factorial.sql CREATE OR REPLACE FUNCTION my_factorial(value INTEGER) RETURNS INTEGER AS $$ arg INTEGER; arg := value; IF arg IS NULL OR arg < 0 THEN 4

5 RAISE NOTICE Invalid Number ; -- pour faire un affichage sur la console RETURN NULL; ELSE IF arg = 1 THEN RETURN 1; ELSE next_value INTEGER; next_value := my_factorial(arg - 1) * arg; RETURN next_value; END IF; END IF; CASE CASE search-expression WHEN expression [, expression [...]] THEN instrructions WHEN expression [, expression [...]] THEN instructions... [ ELSE instructions ] END CASE; search-expression est évaluée et comparée avec les expressions dans WHEN. Si search-epression = expression alors les instructions suivant WHEN correspondant sont exécutées. CASE x WHEN 1, 2 THEN msg:=msg+1; ELSE msg:=msg-1; END CASE; Une autre forme de CASE : CASE WHEN bool-expression THEN instrructions WHEN bool-expression THEN instructions... [ ELSE instructions ] END CASE; CASE WHEN w<0 THEN msg:= negatif ELSE msg:= positif ; END CASE; 5

6 Et troisième forme de CASE CASE WHEN bool-expression THEN expression WHEN bool-expression THEN expression... [ ELSE expression ] END CASE; L exemple précédent peut être réécrit comme : msg := CASE WHEN w<0 THEN negatif ELSE positif ; END CASE; 6 Plusieurs fonctions avec le même nom Comme Java PL/pgSQL supporte plusieurs fonctions avec le même nom si les signatures différentes. Pour supprimer une fonction définie par utilisateur on utilise : DROP FUNCTION nom-fonction(parametres); L exemple suivant définit trois fonctions qui portent le même nom compute_date.sql CREATE OR REPLACE FUNCTION compute_due_date(date) RETURNS DATE AS $$ declaration de variables due_date DATE; rental_period INTERVAL := 7 days ; due_date := $1 + rental_period; RETURN due_date; CREATE OR REPLACE FUNCTION compute_due_date(date, INTERVAL) RETURNS DATE AS $$ -- c est un commentaire dans une fonction RETURN( $1 + $2 ); -- SELECT compute_due_date(current_date,interval 1 MONTH ); CREATE OR REPLACE FUNCTION compute_due_date(dans INTERVAL) RETURNS DATE AS $$ RETURN current_date + dans; END -- select compute_due_date(interval 3 months ); Boucles 7.1 Boucles et sortie d une boucle avec EXIT Boucle infinie : 6

7 insctructions On termine cette boucle par RETURN ou EXIT. La forme générale de EXIT : EXIT [ etiquette ] [ WHEN expression-boolenne ] ; EXIT déplace le contrôle après la boucle. On peut étiqueter les boucles par <<etiquette>> ce qui permet de terminer les boucles imbriquées par EXIT <<etiquette>>; Donc EXIT fait la même chose que break en C. x:=x+1; IF x>10 THEN EXIT; END IF; x:=x+1; EXIT WHEN x>10; <<toto>> x:=x+1; y:=y-1; EXIT toto WHEN y<x; 7.2 Boucles WHILE WHILE condition instructions 7.3 Boucles FOR, CONTINUE [ <<etiquatte>> ] FOR iterator IN [ REVERSE ] expression1.. expression2 [ BY expr ] instructions END ; La variable iterator est automatiquement déclarée comme une variable de type INTEGER (pas besoin de la déclarer nous même). Dans la version avec une étiquette iterator peut-être préfixée par l étiquette. Quelques exemples : FOR I IN I Prendra les valeurs 1,2,...,10 FOR I IN REVERSE I Prendra les valeurs 10,9,8,7,...,1 7

8 FOR I IN REVERSE BY 2 --I prendra les valeurs 10,8,6,4,2 <<toto>> FOR i IN 1..n k:=k * toto.i; Dans l exemple suivant la deuxième boucle for n affiche rien et la première affiche une suite de messages i = 10,i = 9 etc. : create or replace function add() returns void as $$ declare i int; c varchar; begin for i in reverse loop c := to_char(i, 999 ); raise notice i=%, i; end loop; for i in loop raise notice i=%,i; end loop; end $$ language plpgsql; Noter l ordre de bornes inférieure et supérieure dans REVERSE, il est l inverse à celui de PL/SQL d ORACLE. create or replace function add(int) returns void as $$ declare i int; c varchar; begin for i in reverse $1..1 loop c := to_char(i, 999 ); raise notice i=%, i; end loop; --for i in loop -- raise notice i=%,i; --end loop; end $$ language plpgsql; CONTINUE à l intérieur de la boucle aura le même effet qu en langage C, on retourne au début de la boucle. La forme générale : CONTINUE [ etiquette ] [ WHEN expression-booleenne ]; new_factorial.sql CREATE OR REPLACE FUNCTION new_factorial(i INTEGER) RETURNS INTEGER AS $$ k INTEGER := 1; -- IF IF i <= 0 THEN RETURN 0; END IF; 8

9 -- Boucle for indexee par variable INTEGER. -- La variable qui indexe la boucle (L) est de type INTEGER. -- Inutile de la declarer (meme il ne faut pas la declarer). -- S il y a deja une variable L declaree dans le bloc externe -- cette anciene variable sera invisible a l interieur de la boucle. FOR L IN 1..i k := k*l; RETURN k; END SELECT... INTO et la variable FOUND On peut récupérer le résultat d une requête SELECT grâce au SELECT... INTO... : SELECT liste-select INTO destination FROM...; La requête SELECT ne doit pas retourner plus qu une ligne ou une valeur. destination après INTO est une variable ou une liste de variables dans lesquelles postgres mettra le résultat de SELECT. Avec FOUND on pourra vérifier si la requête a effectivement retourné une ligne ou non into.sql CREATE OR REPLACE FUNCTION intot(ingredients.ingredientid%type) RETURNS ingredients.unit%type AS $$ a ingredients%rowtype; --Declaration d une variable du type: --ligne de la table ingredients -- Maintenant on peut faire SELECT dans a: SELECT * INTO a FROM ingredients WHERE $1 = ingredients.ingredientid ; IF FOUND THEN --FOUND est TRUE si le select --a trouve des lignes RETURN a.unit; ELSE RETURN unknown ; END IF; Destination peut-être une liste de variables : intob.sql CREATE OR REPLACE FUNCTION intot(ingredients.ingredientid%type) RETURNS TEXT AS $$ a ingredients.unit%type; b ingredients.name%type; SELECT ingredients.unit, ingredients.name INTO a,b FROM ingredients WHERE $1 = ingredients.ingredientid ; IF FOUND THEN RETURN a b ; ELSE RETURN unknown ; 9

10 END IF; -- select intot( CHESE ); 9 Boucle FOR sur les résultats de SELECT. Une boucle for pour le parcours des résultats d une requête SELECT. La variable iterator doit être soit de type RECORD soit %ROWTYPE [<<label>>] FOR iterator IN requete-select instructions forin.sql CREATE OR REPLACE FUNCTION forin(a ingredients.unit%type) RETURNS DECIMAL(5,3) AS $$ toto RECORD; -- noter une variable de type RECORD prix ingredients.unitprice%type; s REAL DEFAULT 0; -- initialisation avec DEFAULT i INTEGER := 0 ; -- initialisation avec := FOR toto IN SELECT name, unitprice FROM ingredients WHERE unit = a s := s + toto.unitprice; i := i + 1 ; IF i = 0 THEN RETURN 0; END IF; RETURN (s/i) :: DECIMAL(5,3) ; --noter un cast -- SELECT forin( slice ); -- retourne le prix moyen par unite de slice (tranche) A la place d une requête SELECT on peut mettre INSERT, UPDATE, DELETE avec une clause RETURNING. 10 Paramètres OUT Certains paramètres peuvent être déclarés OUT, c est-à-dire comme de paramètres de sortie. La dernière valeur affectée sur un paramètres OUT sert de la valeur de sortie sum_n_product CREATE OR REPLACE FUNCTION sum_n_product(x int, y int, OUT sum int, OUT prod int) AS $$ sum := x + y; prod := x * y; $$ LANGUAGE plpgsql;

11 Si on utilise RETURN dans cette fonction elle devra retourner RECORD. La fonction sum_n_product peut-être utilisée comme SELECT sum_n_product(a,b) from tab; (on suppose que a, b sont deux attributs de la table tab. Si nous voulons accéder à juste un paramètre OUT on utilise la syntaxe suivante : SELECT (sum_n_product(a,b)).sum from tab; ou select sum((sum_n_product(a,b))) from tab; 11 Fonctions avec les types polymorphes Les paramètres d une fonction peuvent être déclarés en utilisant les types polymorphes : anyelement, anyarray, anynonarray, anyenum. Nous n utiliserons que anyelement. Dans la fonction add_three_values CREATE FUNCTION add_three_values(v1 anyelement, v2 anyelement, v3 anyelement) RETURNS anyelement AS $$ result ALIAS FOR $0; result := v1 + v2 + v3; RETURN result; $$ LANGUAGE plpgsql; anyelement désigne le type quelconque (à condition que l addition soit supportée par ce type) mais tous les trois arguments et la valeur retournée doivent être du même type (c est-à-dire quelconque mais le même). Une fonction dont le type de retour est polymorphe possède une variable ( le paramètre ) $0, initialisée NULL, qui permet de stocker la valeur à retourner. Sinon $0 est utilisé comme tous les autres $i. 12 Fonctions avec des types composés create emp CREATE TABLE emp ( name text, salary numeric, age integer, cubicle point ); double_salary CREATE FUNCTION double_salary(emp) RETURNS numeric AS $$ SELECT $1.salary * 2 AS salary; $$ LANGUAGE SQL; Dans la fonction ci-dessus le paramètre emp de la fonction signifie que la fonction prend en paramètre une ligne (un record) avec les même types qu une ligne de la table emp. La fonction est ensuite utilisée comme SELECT name, double_salary(emp.*) AS dream FROM emp WHERE emp.cubicle ~= point (2,1) ; Si une fonction retourne un type composé alors pour accéder aux champs on utilise une de deux syntaxes : SELECT (new_emp()).name; SELECT name(new_emp()); 11

12 La notation fonctionnelle peut être aussi utilisée avec les noms d attributs d une table : toto.prix c est la même chose que prix(toto) pour une table toto. Si une fonction retourne un type composé elle peut être utilisée partout où on utilise de tables, par exemple dans FROM (ceci est vrai aussi pour les valeurs scalaires mais dans ce cas peu utile). 13 Les fonction retournant des tables Il y a deux manière à déclarer qu une fonction retourne une table, soit en utilisant RETURNS SETOF type soit avec RETURNS TABLE(nom1 type1,...,nomn typen) La table de résultat est construite avec les appels à RETURN QUERY et/ou RETURN NEXT comme explique le chapitre RETURNS SETOF Une fonction qui retourne une table déclare la valeur de retour comme RETURNS SETOF sometype Dans l exemple suivant on suppose qu il existe la table nommée ingredients. Donc la fonction commander() retourne une table dont chaque ligne a exactement le même type qu une ligne de la table ingredients. On suppose que la table ingredients possède l attribut inventory commander le parametre ingredients ci-dessous indique juste que $1 devait ^etre du m^eme type -- que la table ingredients CREATE OR REPLACE FUNCTION commander() RETURNS SETOF ingredients AS $$ -- le select suivant peut retourner plusieurs lignes. -- Sans SETOF le select retourne une seule ligne. RETURN QUERY SELECT * FROM ingredients WHERE inventory = 0 OR INVENTORY IS NULL; END ; $$ LANGUAGE plpgsql; Dans l exemple précédent on peut aussi écrire RETURNS SETOF ingredients%rowtype à la place RETURNS SETOF ingredients. Si le type de retour de la fonction n existe pas on peut le créer avec CREATE TYPE. Dans l exemple suivant on commence par créer un type doubleint qui représente une ligne avec deux valeurs de type integer. Ensuite on définit une fonction retournant une table dont chaque ligne est composée de deux valeurs integer. Dans cet exemple on suppose qu il existe une table tab avec les attributs a,b,c de type int ajouterunsetof() create type doubleint as (x integer, y integer); drop function ajouterunsetof(); create or replace function ajouterunsetof() returns setof doubleint as $$ declare r record; begin for r in select * from tab where a is not null loop return next (r.a+1,r.b+1); --ceci ajoute une ligne dans la table de resultats end loop; return; end $$ language plpgsql; RETURNS TABLE La fonction suivante retourne une table avec les attributs nom et prix modifier_prix DROP FUNCTION modifier_prix(numeric(10,2)) ; CREATE OR REPLACE FUNCTION modifier_prix(numeric(10,2)) 12

13 RETURNS TABLE(nom items.name%type, prix items.price%type) AS $$ RETURN QUERY SELECT name, price * $1 FROM items ; END ; $$ LANGUAGE plpgsql; Ajouter des éléments dans la table de résultats: RETURN QUERY et RETURN NEXT Les fonctions qui retournent une table doivent construire la table de résultat avant de terminer. Au début la table de résultats est vide. On ajoute les tuples dans cette table en utilisant une des instructions suivantes : RETURN NEXT expression; RETURN QUERY requete; RETURN QUERY EXECUTE string-req [ USING expression [,...] ]; Ces trois formes de RETURN ne terminent pas l exécution de la fonction mais servent à ajouter des tuples dans la table des résultats. La fonction termine si on exécute RETURN sans paramètre ou si l exécution arrive à la dernière instruction de la fonction. En terminant la fonction retourne la table construite. RETURN NEXT expression; ajoute un tuple de résultat expression dans la table des résultats. Cette forme est utilisée dans les fonctions avec RETURN SETOF type. Le type de l expression doit correspondre au type indiqué dans RETURN SETOF type, voir la fonction ajouterunsetof() dans le chapitre Dans les fonction avec RETURNS TABLE(...) on utilise plutôt RETURN NEXT sans expression. Dans la fonction ajouterun() ci-dessous RETURN NEXT; n est pas suivi d une expression. Ce sont les valeurs actuelles de paramètres x et y qui sont utilisées pour ajouter la ligne (x,y) dans la table de résultats au moment uù RETURN NEXT est exécuté. Donc les d attributs de la table de résultat sont utilisés dans la fonction comme de variables locales. Dans cet exemple on suppose que la Base de Données contient une table tab avec les attributs a,b (et peut-être d autres attributs) ajouterun() create or replace function ajouterun() returns table(x integer, y integer) as $$ declare r record; begin for r in select * from tab where a is not null loop x:=r.a+1; y:=r.b+1; return next; --ceci ajoute (x,y) dans la table de resultats end loop; return; end $$ language plpgsql; Ensuite nous pouvons utiliser cette fonction comme dans ici : select * from ajouterun() as t, tab where t.x=tab.a; RETURN QUERY ajoute les résultats d une requête dans la table des résultats. La fonction suivante fait exactement la même chose que la fonction ajouterun() de l exemple précédent en ajoutant un tuple chaque fois : ajouterunbis() create or replace function ajouterunbis() returns table(x integer, y integer) as $$ 13

14 declare r record; begin for r in select * from tab where a is not null loop return query values(r.a+1,r.b+1) ; --ceci ajoute un tuple (r.a+1,r.b+1) -- dans la table de resultats. end loop; return; end $$ language plpgsql; Mais on peut faire la même chose sans boucle : ajouteruntiers() create or replace function ajouteruntiers() returns table(x integer, y integer) as $$ begin return query select a+1,b+1 from tab where a is not null; return; end $$ language plpgsql; Dans la version RETURN QUERY EXECUTE la requête SELECT se trouve dans une chaîne de caractères string-reg. Cette chaîne peut contenir des occurrences de caractère % qui seront remplacées par les valeurs des expressions qui se trouvent après USING. C est RETURN sans paramètre qui termine la fonction et retourne la table construite grâce au RETURN NEXT et RETURN QUERY. 14 Exécuter le code SQL à l intérieur d une fonction Nous pouvons mettre le code SQL directement dans les fonctions PL/pgSQL : CREATE TABLE, INSERT, UPDATE, DELETE, etc. sauf SELECT et sauf l appel à une autre fonction si le résultat de SELECT ou de l appel n est pas récupéré. Si on veut exécuter SELECT sans récupération de résultat on fera PERFORM requete-select ; comme dans PERFORM * FROM ingredients WHERE unitprice < 5; Noter que PERFORM remplace le mot SELECT. PERFORM peut être utilisé pour évaluer une expression SQL sans récupération de résultat, par exemple PERFORM fonction(parametres); Après PERFORM on pourra tester la variable FOUND pour voir si la requête a produit un résultat ou si elle a retourné NULL. Si on utilise PERFORM c est pour les effets de bord de la requête et non pas pour la valeur retournée (la valeur on l ignore sciemment) ajouter_meal() CREATE OR REPLACE FUNCTION ajouter_meal( meals.mealid%type, meals.name%type) RETURNS INTEGER AS $$ id ALIAS FOR $1; nom ALIAS FOR $2; a INTEGER; -- si a la place de l instruction suivante on ecrit -- SELECT * FROM meals WHERE mealid=id; 14

15 -- cela compile OK mais probleme a l execution. a := add(5,6); PERFORM add(7,8); PERFORM * FROM meals WHERE mealid=id; IF FOUND THEN RETURN 0; END IF; INSERT INTO meals VALUES(id,nom); RETURN 1; EXECUTE pour exécuter les requêtes dynamiques. EXECUTE command-string; permet d exécuter une requête contenue dans une chaîne de caractères. Cela permet de faire de requêtes dynamiques qui ne sont pas precompilées. Quelques exemples : exect.sql CREATE OR REPLACE FUNCTION exect(commande VARCHAR) RETURNS INTERVAL AS $$ beg_time TIMESTAMP; end_time TIMESTAMP; beg_time := current_timestamp; EXECUTE commande; end_time := current_timestamp; RETURN end_time - beg_time; END --SELECT exect( SELECT * FROM ingredients ); modif_prix CREATE OR REPLACE FUNCTION modif_prix(varchar(30), DEC(5,2), DEC(6,2)) RETURNS SETOF ingredients AS $$ qui ALIAS FOR $1; plus ALIAS FOR $2; pcent ALIAS FOR $3; val ingredients.unitprice%type; tal ingredients.unitprice%type; r RECORD; u RECORD; FOR r IN EXECUTE SELECT * FROM ingredients WHERE qui val := r.unitprice * ( pcent )/100 ; tal := r.unitprice + plus; IF val > tal THEN u := ROW( r.ingredientid, r.name, r.unit, val, r.foodgroup, r.inventory, r.vendorid )::ingredients; RETURN NEXT u; ELSE u := ROW( r.ingredientid, r.name, r.unit, tal, r.foodgroup, r.inventory, r.vendorid )::ingredients; RETURN NEXT u; END IF; RETURN; 15

16 $$ LANGUAGE plpgsql; test_modif_prix SELECT I.name, I.unitprice, AUG.unitprice FROM ingredients I JOIN modif_prix( foodgroup= Milk, 0.05, 5) AS AUG USING(ingredientid) ; Forme générale de EXECUTE : EXECUTE command-string [ INTO [ STRICT ] target ] [ USING expression,...] ] ; command-string de type text. target est une variable de type RECORD, ou une variable de type ROWTYPE ou une liste de variables simples. Le résultat de la requête sera stocké dans ces variables. Si la requête retourne plusieurs lignes alors c est la première ligne qui sera stockée dans le(s) variable(s) INTO. Avec STRICT il aura une erreur si la requête retourne plusieurs lignes. command-string peur avoir des paramètres, $1, $2,... qui seront substitués par les valeurs calculées dans USING. Cela ne concerne que les paramètres, $1,... ne concerne pas les noms de tables qui doivent être injectés comme les chaînes de caractères. On peut utiliser les fonction quote_lireal quote_ident quote_nullable. quote_indent(text) retourne une chaîne de caractères avec des pour l utilisation comme identificateur.* quote_literal(text) pour que approprié comme string-literal. Elle retourne NULL si l argument NULL. Si on veut NULL pour l argument NULL il faut utiliser quote_nullable(text). 16 Requête dynamiques dans une boucle FOR. [<<label>>] FOR iterator IN EXECUTE string-requete [ USING expression,... ] instructions string-requete s évalue comme une chaîne de caractères contenant une requête SELECT. Exemples : somme2.sql CREATE OR REPLACE FUNCTION somme2(req VARCHAR) RETURNS REAL AS $$ toto REAL := 0; -- noter une variable de type RECORD s REAL DEFAULT 0; -- initialisation par DEFAULT FOR toto IN EXECUTE req s := s + toto; RETURN s; --SELECT somme2( SELECT unitprice FROM ingredients ); somme_square.sql CREATE OR REPLACE FUNCTION somme_square(tables text, col text) RETURNS REAL AS $$ toto REAL := 0; -- noter une variable de type RECORD s REAL DEFAULT 0; -- initialisation par DEFAULT 16

17 FOR toto IN EXECUTE SELECT quote_ident(col) FROM quote_ident(tables) s := s + toto*toto; RETURN sqrt(s); select somme_square( ingredients, unitprice ); Encore un exemple qui calcule la déviation. Par définition une déviation d un ensemble de n valeurs : x 1,...,x n est égale à 1 n n i=1 (xi x) où x = 1 n n i=1xi est la moyenne. Le paramètres de la fonction : t - le nom de la table, col le nom de la colonne, cond - une condition à mettre dans WHERE. So cond est NULL alors il n y aura par WHERE dans SELECT : deviation() drop function deviation(varchar,varchar,varchar); create or replace function deviation(t varchar, col varchar, cond varchar) returns real as $$ declare s real; sq real; i integer; r real; sigma real; m varchar; x varchar; d int := 5; begin s:=0; i:=0; sq:=0; m:= case when cond is null then else where cond end ; -- case peut etre remplace par IF: -- IF cond is null then -- m:= ; -- else -- m:= where cond; -- end if; for r in execute select col from t m loop if r is not null then s=s+r; sq=sq+r*r; i=i+1; end if; end loop; sigma:=sq/i-(s/i)*(s/i); return sigma; end $$ language plpgsql; Dans cet exemple on pourrait utiliser EXECUTE... USING : for r in execute select $1 from t m USING col loop... 17

18 end loop; Noter qu il est impossible de mettre le nom de la table dans USING, uniquement les données. 17 Utilisation de curseur. Pour travailler avec le curseur :, OPEN, FETCH, CLOSE Une fonction peut retourner un curseus et l appelant peut l utiliser pour parcourir la table de résultat. C est moyen efficace pour retourner un enseble de lignes d une table Curseur liés à une requête Déclaration dans la partie d un bloc : nom_cursor CURSOR FOR requete_select ; nom_cursor [ [NO] SCROLL] CURSOR(parametres_formelles) FOR requete_select ; déclarent des curseur liés. SCROLL indique qu on pourra faire un parcours en arrière sur le résultat. Paramètres formelles est une liste de couples nom type_de_donnee. Exemples : curs1 refcursor; --curseur non lie curs2 CURSOR FOR SELECT * FROM tenk1; curs3 CURSOR (key integer) IS SELECT * FROM tenk1 WHERE unique1 = key; Toutes les trois variables sont de type refcursor mais les deux dernières sont liées à des requêtes. De plus curs3 possède un paramètre key de type INTEGER FETCH Pour récupérer les valeurs faire dans une boucle : FETCH [ direction {FROM IN} ] nom_cursor INTO destinations(s) ; où destination(s) une variable RECORD ou une variable %ROWTYPE ou une liste de variables. Ici un exemple qu on aurait pu faire avec FOR. Noter EXIT WHEN NOT FOUND; qui permet de tester si le parcours est fini. Si rien à lire destination prendra la valeur NULL. Les directions NEXT ligne suivante, PRIOR ligne précédente, FIRST la première ligne, LAST la dernière ligne, ABSOLUTE numero ligne numero à partir du début, RELATIVE numero linge numero à partir de la position courante du curseur. Dans ce cas l argument numero peut-être négatif. permettent de récupérer une seule ligne (éventuellement NULL). Les directions ALL FORWARD FORWARD nombre FORWARD ALL BACKWARD BACKWARD nombre BACKWARD ALL permettent de récupérer le nombre de lignes indiqué à partir de la position courante, soit en avant soit en arrière. Ces directions ne font pas partie du standard SQL (ce sont des extension de postgres). FETCH sans direction est équivalent à FETCH NEXT 17.3 MOVE MOVE [ direction { FROM IN } ] cursor; déplace le curseur mais ne retourne pas de résultat. 18

19 17.4 OPEN/CLOSE Pour ouvrir un curseur lié avec les paramètres : OPEN nom_cursor(parametres_actuels); Pour fermer un curseur non utilisé faire : CLOSE cursor; curs.sql CREATE OR REPLACE FUNCTION curs(ingredients.unitprice%type, ingredients.unitprice%type) RETURNS REAL AS $$ -- declaration d un cursor toto CURSOR FOR SELECT * FROM ingredients WHERE unitprice BETWEEN $1 AND $2; resultat RECORD; s REAL DEFAULT 0; -- initialisation par DEFAULT OPEN toto; -- ouvrir le cursor FETCH toto INTO resultat; -- fetch une ligne dans un record EXIT WHEN NOT FOUND; -- Plus rien a lire alors quitter la boucle s := s + resultat.unitprice * resultat.unitprice ; CLOSE toto; -- fermer le cursor RETURN s; --SELECT curs(0.01,0.03); Les curseur utilisent des ressources de système (la mémoire pour la table parcourus par le curseur). Si le curseur n est plus utilisé il est recommander de le fermer Retourner le curseur Un fonction peut retourner le curseur (la fonction RETURNS refcursor). Il faut d abord associer un nom avec le curseur avant OPEN. Pour cela on fait une affectation d une chaîne de caractères sur la variable curseur. Cette chaîne de caractère c est le nom de curseur.(mais ce nom peut être généré automatiquement, donc il n est pas nécessaire d associer un nom au curseur.) Exemple suivant montre comment l appelant passe le nom de curseur vers la fonction, c est le plus simple puisque autrement l appelant devrait trouver le nom de curseur autrement. CREATE TABLE test (col text); INSERT INTO test VALUES ( 123 ); CREATE FUNCTION reffunc(refcursor) RETURNS refcursor AS $$ OPEN $1 FOR SELECT col FROM test; RETURN $1; $$ LANGUAGE plpgsql; ; SELECT reffunc( funccursor ); FETCH ALL IN funccursor; COMMIT; 19

20 17.6 Boucler sur le résultats d un curseur [ <<label>> ] FOR recordvar IN bound_cursorvar [ ( argument_values ) ] statements END [ label ]; Cela concerne uniquement le curseurs liés, le curseur ne peut pas être ouvert à ce moment. La variable recordvar est automatiquement déclarée comme record et existe seulement dans la boucle Curseur non liés On peut déclarer un curseur qui ne sera pas associé à une requête. Le curseur de ce type est déclaré comme une variable de type refcursor : mon_cursor refcursor; Si nous avons un curseur non lié alors au moment de faire OPEN on spécifie la requête SELECT : OPEN mon_cursor_non_lie [[NO] SCROLL] FOR requ^ete; pour une requête fixe ou OPEN mon_cursor [[ NO ] SCROLL ] FOR EXECUTE string-requ^ete; pour une requête dynamique. Ensuite nous pouvons utiliser le curseur pour parcourir les résultats de la requête. L exemple précédent réécrit pour utiliser les curseurs non liés : curspd.sql CREATE OR REPLACE FUNCTION curspd() RETURNS VOID AS $$ -- declaration des cursor non lies vendor refcursor; ingr refcursor; resultat RECORD; val ingredients%rowtype; I INTEGER; OPEN vendor FOR SELECT * FROM vendors; -- ouvrir le cursor FETCH vendor INTO resultat; -- fetch une ligne de vendors dans un record EXIT WHEN NOT FOUND; -- Plus rien a lire alors quitter la boucle I := 0; OPEN ingr FOR SELECT * FROM ingredients WHERE resultat.vendorid = ingredients.vendorid; --boucle interne FETCH ingr INTO val; --fetch une ligne EXIT WHEN NOT FOUND; I := I+1; CLOSE ingr; --fermer cursor IF I > 2 THEN RAISE NOTICE bon vendor %, resultat.repfname; ELSE RAISE NOTICE mauvais vendor %, resultat.repfname; 20

21 END IF; --fin boucle externe CLOSE vendor; -- fermer le cursor RETURN ; utilisation: --SELECT curspd(); L exemple suivant présente une fonction qui calcule la médiane de valeurs d une colonne. Le nom de la table et le nom de la colonne passent comme les paramètres de la fonction median() create or replace function median(tab varchar, col varchar) returns real as $$ declare c refcursor; i integer; r real; begin open c SCROLL for execute select col from tab where col is not null ORDER BY col; i:=0; move next from c ; exit when not found; i:=i+1; end ; FETCH absolute (i+2)/2 FROM c into r; close c; return r; end $$ language plpgsql; Afficher des messages, lancer une exception Pour afficher des messages on utilise : RAISE NOTICE message [,variable..]; Le message peut contenir les % dont les occurrences sont substituées par les variables de la liste cursp.sql CREATE OR REPLACE FUNCTION cursp() RETURNS VOID AS $$ -- declaration d un cursor simple vendor CURSOR FOR SELECT * FROM vendors; -- declaration d un cursor parametre ingr CURSOR(ID ingredients.vendorid%type) FOR SELECT * FROM ingredients WHERE ID = ingredients.vendorid; resultat RECORD; 21

22 val ingredients%rowtype; I INTEGER; OPEN vendor; -- ouvrir le cursor FETCH vendor INTO resultat; -- fetch une ligne de vendors dans un record EXIT WHEN NOT FOUND; -- Plus rien a lire alors quitter la boucle I := 0; OPEN ingr(resultat.vendorid) ; --boucle interne FETCH ingr INTO val; --fetch une ligne EXIT WHEN NOT FOUND; I := I+1; CLOSE ingr; --fermer cursor IF I > 2 THEN RAISE NOTICE bon vendor %, resultat.repfname; ELSE RAISE NOTICE mauvais vendor %, resultat.repfname; END IF; --fin boucle externe CLOSE vendor; -- fermer le cursor RETURN ; utilisation: --SELECT cursp(); Pour lancer une exception on utilise : RAISE EXCEPTION format [,expression [,...]] [ USING option = expression [,...]] ; Il y a plusieurs option possibles, en particulier, par exemple USING ERRCODE= indique le code d erreur. Les codes d erreur existant sont spécifiés dans la documentation de postgres. Si il y a une exception pendant l exécution d une fonction alors PLpgSQL fait automatiquement ROLLBACK jusqu au début du bloc. 22

Langage propre à Oracle basé sur ADA. Offre une extension procédurale à SQL

Langage propre à Oracle basé sur ADA. Offre une extension procédurale à SQL Cours PL/SQL Langage propre à Oracle basé sur ADA Offre une extension procédurale à SQL PL/SQL permet d utiliser un sous-ensemble du langage SQL des variables, des boucles, des alternatives, des gestions

Plus en détail

Module Administration BD Chapitre 1 : Surcouche procédurale dans les SGBDS

Module Administration BD Chapitre 1 : Surcouche procédurale dans les SGBDS Module Administration BD Chapitre 1 : Surcouche procédurale dans les SGBDS 1. Introduction Nous allons aborder la notion de surcouche procédurale au sein des SGBDS relationnels tels que Oracle (PLSQL)

Plus en détail

Le langage procédural PL-PGSQL

Le langage procédural PL-PGSQL Le langage procédural PL-PGSQL PL/pgSQL est un langage procédural utilisé dans le système de gestion de bases de données PostgreSQL. Objectifs : créer des fonctions standards et triggers, ajouter des structures

Plus en détail

Bases de données avancées

Bases de données avancées Bases de données avancées Jean-Yves Antoine LI - Université François Rabelais de Tours Jean-Yves.Antoine@univ-tours.fr UFR Sciences et Techniques IUP SIR Blois Master 1 Bases de Données avancées IUP Blois,

Plus en détail

Les Triggers SQL. Didier DONSEZ. Université de Valenciennes Institut des Sciences et Techniques de Valenciennes donsez@univ-valenciennes.

Les Triggers SQL. Didier DONSEZ. Université de Valenciennes Institut des Sciences et Techniques de Valenciennes donsez@univ-valenciennes. Les Triggers SQL Didier DONSEZ Université de Valenciennes Institut des Sciences et Techniques de Valenciennes donsez@univ-valenciennes.fr 1 Sommaire Motivations Trigger Ordre Trigger Ligne Condition Trigger

Plus en détail

Cours Bases de données 2ème année IUT

Cours Bases de données 2ème année IUT Cours Bases de données 2ème année IUT Cours Bilan : Des vues à PL/SQL corrigé Anne Vilnat http://www.limsi.fr/individu/anne/cours Plan 1 Cas exemple 2 Les tables... 3 Vues et index 4 Privilèges 5 Fonctions

Plus en détail

Bases de Données Avancées PL/SQL

Bases de Données Avancées PL/SQL 1/170 Bases de Données Avancées Thierry Hamon Bureau H202 - Institut Galilée Tél. : 33 1.48.38.35.53 Bureau 150 LIM&BIO EA 3969 Université Paris 13 - UFR Léonard de Vinci 74, rue Marcel Cachin, F-93017

Plus en détail

PL langage de programmation côté serveur. SQL à la base : types, expressions, requêtes

PL langage de programmation côté serveur. SQL à la base : types, expressions, requêtes Introduction à PL langage de programmation côté serveur installation nécessaire : CREATE LANGUAGE ou createlang interprété : erreurs de syntaxe possibles à l exécution SQL à la base : types, expressions,

Plus en détail

Licence de MIDO - 3ème année Spécialités Informatique et Mathématiques Appliquées

Licence de MIDO - 3ème année Spécialités Informatique et Mathématiques Appliquées Licence de MIDO - 3ème année Spécialités Informatique et Mathématiques Appliquées ANNEE 2014 / 2015 Désignation de l enseignement : Bases de données Nom du document : TP SQL sous PostgreSQL Rédacteur :

Plus en détail

Laboratoires de bases de données. Laboratoire n 6. Programmation SQL. par Danièle BAYERS et Louis SWINNEN

Laboratoires de bases de données. Laboratoire n 6. Programmation SQL. par Danièle BAYERS et Louis SWINNEN Département Informatique Laboratoires de bases de données Laboratoire n 6 Programmation SQL par Danièle BAYERS et Louis SWINNEN Ce document est disponible sous licence Creative Commons indiquant qu il

Plus en détail

COMMANDES SQL... 2 COMMANDES DE DEFINITION DE DONNEES... 2

COMMANDES SQL... 2 COMMANDES DE DEFINITION DE DONNEES... 2 SQL Sommaire : COMMANDES SQL... 2 COMMANDES DE DEFINITION DE DONNEES... 2 COMMANDES DE MANIPULATION DE DONNEES... 2 COMMANDES DE CONTROLE TRANSACTIONNEL... 2 COMMANDES DE REQUETE DE DONNEES... 2 COMMANDES

Plus en détail

OpenPaaS Le réseau social d'entreprise

OpenPaaS Le réseau social d'entreprise OpenPaaS Le réseau social d'entreprise Spécification des API datastore SP L2.3.1 Diffusion : Institut MinesTélécom, Télécom SudParis 1 / 12 1OpenPaaS DataBase API : ODBAPI...3 1.1Comparaison des concepts...3

Plus en détail

Olivier Mondet http://unidentified-one.net

Olivier Mondet http://unidentified-one.net T-GSI Ch.4 Le Langage SQL LDD, LCD Cet exercice guidé reprend le plan suivis lors de l intervention de formation faite pour l académie de Versailles. L objectif principal visait en la présentation du langage

Plus en détail

CREATION WEB DYNAMIQUE

CREATION WEB DYNAMIQUE CREATION WEB DYNAMIQUE IV ) MySQL IV-1 ) Introduction MYSQL dérive directement de SQL (Structured Query Language) qui est un langage de requêtes vers les bases de données relationnelles. Le serveur de

Plus en détail

Langage SQL (1) 4 septembre 2007. IUT Orléans. Introduction Le langage SQL : données Le langage SQL : requêtes

Langage SQL (1) 4 septembre 2007. IUT Orléans. Introduction Le langage SQL : données Le langage SQL : requêtes Langage SQL (1) Sébastien Limet Denys Duchier IUT Orléans 4 septembre 2007 Notions de base qu est-ce qu une base de données? SGBD différents type de bases de données quelques systèmes existants Définition

Plus en détail

Le Langage SQL version Oracle

Le Langage SQL version Oracle Université de Manouba École Supérieure d Économie Numérique Département des Technologies des Systèmes d Information Le Langage SQL version Oracle Document version 1.1 Mohamed Anis BACH TOBJI anis.bach@isg.rnu.tn

Plus en détail

Oracle Le langage procédural PL/SQL

Oracle Le langage procédural PL/SQL Oracle Le langage procédural PL/SQL Denis Roegel roegel@loria.fr IUT Nancy 2 1998/1999 Sommaire 1 Introduction 3 2 Création de packages 3 2.1 Procédures groupées.........................................

Plus en détail

TP Contraintes - Triggers

TP Contraintes - Triggers TP Contraintes - Triggers 1. Préambule Oracle est accessible sur le serveur Venus et vous êtes autorisés à accéder à une instance licence. Vous utiliserez l interface d accés SQL*Plus qui permet l exécution

Plus en détail

Langage SQL : créer et interroger une base

Langage SQL : créer et interroger une base Langage SQL : créer et interroger une base Dans ce chapitre, nous revenons sur les principales requêtes de création de table et d accès aux données. Nous verrons aussi quelques fonctions d agrégation (MAX,

Plus en détail

Devoir Data WareHouse

Devoir Data WareHouse Université Paris XIII Institut Galilée Master 2-EID BENSI Ahmed CHARIFOU Evelyne Devoir Data WareHouse Optimisation, Transformation et Mise à jour utilisées par un ETL Mr R. NEFOUSSI Année 2007-2008 FICHE

Plus en détail

ECR_DESCRIPTION CHAR(80), ECR_MONTANT NUMBER(10,2) NOT NULL, ECR_SENS CHAR(1) NOT NULL) ;

ECR_DESCRIPTION CHAR(80), ECR_MONTANT NUMBER(10,2) NOT NULL, ECR_SENS CHAR(1) NOT NULL) ; RÈGLES A SUIVRE POUR OPTIMISER LES REQUÊTES SQL Le but de ce rapport est d énumérer quelques règles pratiques à appliquer dans l élaboration des requêtes. Il permettra de comprendre pourquoi certaines

Plus en détail

Java Licence Professionnelle CISII, 2009-10

Java Licence Professionnelle CISII, 2009-10 Java Licence Professionnelle CISII, 2009-10 Cours 4 : Programmation structurée (c) http://www.loria.fr/~tabbone/cours.html 1 Principe - Les méthodes sont structurées en blocs par les structures de la programmation

Plus en détail

Bases de Données relationnelles et leurs systèmes de Gestion

Bases de Données relationnelles et leurs systèmes de Gestion III.1- Définition de schémas Bases de Données relationnelles et leurs systèmes de Gestion RAPPELS Contraintes d intégrité sous Oracle Notion de vue Typage des attributs Contrainte d intégrité Intra-relation

Plus en détail

FileMaker 13. Guide de référence SQL

FileMaker 13. Guide de référence SQL FileMaker 13 Guide de référence SQL 2013 FileMaker, Inc. Tous droits réservés. FileMaker, Inc. 5201 Patrick Henry Drive Santa Clara, Californie 95054 FileMaker et Bento sont des marques commerciales de

Plus en détail

Le langage SQL pour Oracle - partie 1 : SQL comme LDD

Le langage SQL pour Oracle - partie 1 : SQL comme LDD Le langage SQL pour Oracle - partie 1 : SQL comme LDD 1 SQL : Introduction SQL : Structured Query Langage langage de gestion de bases de donn ees relationnelles pour Définir les données (LDD) interroger

Plus en détail

Cours 3. Développement d une application BD. DBA - Maîtrise ASR - Université Evry

Cours 3. Développement d une application BD. DBA - Maîtrise ASR - Université Evry Cours 3 Développement d une application BD 1 Plan du cours Gestion de la sécurité des données Optimisation des schémas de bases via la dénormalisation Utilisation de vues Placement du code applicatif dans

Plus en détail

Notes de cours : bases de données distribuées et repliquées

Notes de cours : bases de données distribuées et repliquées Notes de cours : bases de données distribuées et repliquées Loïc Paulevé, Nassim Hadj-Rabia (2009), Pierre Levasseur (2008) Licence professionnelle SIL de Nantes, 2009, version 1 Ces notes ont été élaborées

Plus en détail

A.E.C. GESTION DES APPLICATIONS TECHNOLOGIE DE L'INFORMATION LEA.BW

A.E.C. GESTION DES APPLICATIONS TECHNOLOGIE DE L'INFORMATION LEA.BW A.E.C. GESTION DES APPLICATIONS TECHNOLOGIE DE L'INFORMATION LEA.BW Groupe : 322 Exploitation des Banques de données 420-PK6-SL (1-2-1) Étape : 3 Professeur Nom: Marcel Aubin Courriel : maubin@cegep-st-laurent.qc.ca

Plus en détail

Bases de données Oracle Virtual Private Database (VPD) pour la gestion des utilisateurs d applications

Bases de données Oracle Virtual Private Database (VPD) pour la gestion des utilisateurs d applications Bases de données Oracle Virtual Private Database (VPD) pour la gestion des utilisateurs d applications P.-A. Sunier, HEG-Arc Neuchâtel avec le concours de J. Greub pierre-andre.sunier@he-arc.ch http://lgl.isnetne.ch/

Plus en détail

1. Qu'est-ce que SQL?... 2. 2. La maintenance des bases de données... 2. 3. Les manipulations des bases de données... 5

1. Qu'est-ce que SQL?... 2. 2. La maintenance des bases de données... 2. 3. Les manipulations des bases de données... 5 1. Qu'est-ce que SQL?... 2 2. La maintenance des bases de données... 2 2.1 La commande CREATE TABLE... 3 2.2 La commande ALTER TABLE... 4 2.3 La commande CREATE INDEX... 4 3. Les manipulations des bases

Plus en détail

Bases de données relationnelles

Bases de données relationnelles Bases de données relationnelles Système de Gestion de Bases de Données Une base de données est un ensemble de données mémorisé par un ordinateur, organisé selon un modèle et accessible à de nombreuses

Plus en détail

A QUOI SERVENT LES BASES DE DONNÉES?

A QUOI SERVENT LES BASES DE DONNÉES? BASE DE DONNÉES OBJET Virginie Sans virginie.sans@irisa.fr A QUOI SERVENT LES BASES DE DONNÉES? Stockage des informations : sur un support informatique pendant une longue période de taille importante accès

Plus en détail

Sybase Adaptive Server Enterprise 15

Sybase Adaptive Server Enterprise 15 Sybase Adaptive Server Enterprise 15 Prêt pour Sybase Adaptive Server Enterprise 15? Novembre 2006 Documentation technique # 29 Introduction Cette présentation liste les fonctionnalités importantes de

Plus en détail

BASES DE DONNEES TP POSTGRESQL

BASES DE DONNEES TP POSTGRESQL 2003-2004 Université Paris Dauphine IUP Génie Mathématique et Informatique IUP 2 ème année et Formation Continue BASES DE DONNEES TP POSTGRESQL Maude Manouvrier La reproduction de ce document par tout

Plus en détail

Historisation des données

Historisation des données Historisation des données Partie 1 : mode colonne par Frédéric Brouard, alias SQLpro MVP SQL Server Expert langage SQL, SGBDR, modélisation de données Auteur de : SQLpro http://sqlpro.developpez.com/ "SQL",

Plus en détail

MS SQL Express 2005 Sauvegarde des données

MS SQL Express 2005 Sauvegarde des données MS SQL Express 2005 Sauvegarde des données Création : 08.04.2011 Modification : 08.04.2011 Situation La base de données gratuite MSSQL Express 2005 ne dispose pas d agent (planificateur de tâche) comme

Plus en détail

Corrigés détaillés des exercices

Corrigés détaillés des exercices Corrigés détaillés des exercices Diagramme des tables objet La figure suivante vous aidera dans la compréhension des manipulations des objets de la base. Client_type Client num nom adresse {telephone_vry}

Plus en détail

Introduction au PL/SQL Oracle. Alexandre Meslé

Introduction au PL/SQL Oracle. Alexandre Meslé Introduction au PLSQL Oracle Alexandre Meslé 17 octobre 2011 Table des matières 1 Notes de cours 3 1.1 Introduction au PLSQL............................................ 3 1.1.1 PLSQL.................................................

Plus en détail

SQL Historique 1982 1986 1992

SQL Historique 1982 1986 1992 SQL Historique 1950-1960: gestion par simple fichier texte 1960: COBOL (début de notion de base de données) 1968: premier produit de sgbdr structuré (IBM -> IDMS) 1970-74: élaboration de l'outil d'analyse

Plus en détail

Encryptions, compression et partitionnement des données

Encryptions, compression et partitionnement des données Encryptions, compression et partitionnement des données Version 1.0 Grégory CASANOVA 2 Compression, encryption et partitionnement des données Sommaire 1 Introduction... 3 2 Encryption transparente des

Plus en détail

Introduction à JDBC. Accès aux bases de données en Java

Introduction à JDBC. Accès aux bases de données en Java Introduction à JDBC Accès aux bases de données en Java Eric Cariou Université de Pau et des Pays de l'adour Département Informatique Eric.Cariou@univ-pau.fr 1 Introduction JDBC : Java Data Base Connectivity

Plus en détail

Modernisation, développement d applications et DB2 sous IBM i Technologies, outils et nouveautés 2013-2014. Volubis.fr

Modernisation, développement d applications et DB2 sous IBM i Technologies, outils et nouveautés 2013-2014. Volubis.fr Modernisation, développement d applications et DB2 sous IBM i Technologies, outils et nouveautés 2013-2014 13 et 14 mai 2014 IBM Client Center Paris, Bois-Colombes Volubis.fr Conseil et formation sur OS/400,

Plus en détail

Java DataBaseConnectivity

Java DataBaseConnectivity Java DataBaseConnectivity JDBC JDBC est une API Java (ensemble de classes et d interfaces défini par SUN et les acteurs du domaine des SGBD) permettant d accéder aux bases de données à l aide du langage

Plus en détail

Les BASES de DONNEES dans WampServer

Les BASES de DONNEES dans WampServer Les BASES de DONNEES dans WampServer 1 Définitions Générales Une base de données (BDD) permet d'enregistrer, de stocker, de ranger des données de façon organisée et hiérarchisée. SQL est le langage qui

Plus en détail

Configurer la supervision pour une base MS SQL Server Viadéis Services

Configurer la supervision pour une base MS SQL Server Viadéis Services Configurer la supervision pour une base MS SQL Server Référence : 11588 Version N : 2.2 : Créé par : Téléphone : 0811 656 002 Sommaire 1. Création utilisateur MS SQL Server... 3 2. Configuration de l accès

Plus en détail

Création et Gestion des tables

Création et Gestion des tables Création et Gestion des tables Version 1.0 Z Grégory CASANOVA 2 Sommaire 1 Introduction... 3 2 Pré-requis... 4 3 Les tables... 5 3.1 Les types de données... 5 3.1.1 Les types de données Sql Server... 5

Plus en détail

Mysql avec EasyPhp. 1 er mars 2006

Mysql avec EasyPhp. 1 er mars 2006 Mysql avec EasyPhp 1 er mars 2006 Introduction MYSQL dérive directement de SQL (Structured Query Language) qui est un langage de requètes vers les bases de données relationnelles. Il en reprend la syntaxe

Plus en détail

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3. 1. Structure d un programme C Un programme est un ensemble de fonctions. La fonction "main" constitue le point d entrée pour l exécution. Un exemple simple : #include int main() { printf ( this

Plus en détail

Le langage SQL (première partie) c Olivier Caron

Le langage SQL (première partie) c Olivier Caron Le langage SQL (première partie) 1 Plan Le S.G.B.D. postgres Le langage SQL Langage de manipulation de données Langage de requêtes 2 Quelques mots sur Postgres (1/2) Travaux de Stonebraker (Univ. Berkeley)

Plus en détail

Gestion de base de données

Gestion de base de données Université Libre de Bruxelles Faculté de Philosophie et Lettres Département des Sciences de l Information et de la Communication Gestion de base de données Projet : Take Off ASBL Cours de M. A. Clève STIC-B-505

Plus en détail

Utilisation de JAVA coté Application serveur couplé avec Oracle Forms Hafed Benteftifa www.degenio.com Novembre 2008

Utilisation de JAVA coté Application serveur couplé avec Oracle Forms Hafed Benteftifa www.degenio.com Novembre 2008 Introduction Utilisation de JAVA coté Application serveur couplé avec Oracle Forms Hafed Benteftifa www.degenio.com Novembre 2008 Forms 10g permet l utilisation du JAVA côté client et côté application

Plus en détail

Le Langage De Description De Données(LDD)

Le Langage De Description De Données(LDD) Base de données Le Langage De Description De Données(LDD) Créer des tables Décrire les différents types de données utilisables pour les définitions de colonne Modifier la définition des tables Supprimer,

Plus en détail

Plan Général Prévisionnel (1/2) (non contractuel) Internet et Outils L1/IO2 2006-2007 S2-IO2 Bases de données: Jointures, Transactions

Plan Général Prévisionnel (1/2) (non contractuel) Internet et Outils L1/IO2 2006-2007 S2-IO2 Bases de données: Jointures, Transactions Général Prévisionnel (1/2) (non contractuel) Internet et Outils L1/IO2 2006-2007 S2-IO2 Bases de données: Jointures, Cours Internet et Outils: [1/12] Intro, Internet, Web, XHTML (2H) [2/12] XHTML(2H) [3/12]

Plus en détail

Partie I : Créer la base de données. Année universitaire 2008/2009 Master 1 SIIO Projet Introduction au Décisionnel, Oracle

Partie I : Créer la base de données. Année universitaire 2008/2009 Master 1 SIIO Projet Introduction au Décisionnel, Oracle Année universitaire 2008/2009 Master 1 SIIO Projet Introduction au Décisionnel, Oracle Ce projet comporte trois parties sur les thèmes suivants : création de base de donnée, requêtes SQL, mise en œuvre

Plus en détail

Attaques applicatives

Attaques applicatives Attaques applicatives Attaques applicatives Exploitation d une mauvaise programmation des applications Ne touche pas le serveur lui-même mais son utilisation/ configuration Surtout populaire pour les sites

Plus en détail

ORACLE 10G DISTRIBUTION ET REPLICATION. Distribution de données avec Oracle. G. Mopolo-Moké prof. Associé UNSA 2009/ 2010

ORACLE 10G DISTRIBUTION ET REPLICATION. Distribution de données avec Oracle. G. Mopolo-Moké prof. Associé UNSA 2009/ 2010 ORACLE 10G DISTRIBUTION ET REPLICATION Distribution de données avec Oracle G. Mopolo-Moké prof. Associé UNSA 2009/ 2010 1 Plan 12. Distribution de données 12.1 Génération des architectures C/S et Oracle

Plus en détail

Auto-évaluation Oracle: cours de base

Auto-évaluation Oracle: cours de base Auto-évaluation Oracle: cours de base Document: F0475Test.fm 14/01/2008 ABIS Training & Consulting P.O. Box 220 B-3000 Leuven Belgium TRAINING & CONSULTING INTRODUCTION AUTO-ÉVALUATION ORACLE: COURS DE

Plus en détail

Administration des bases de données. Jean-Yves Antoine http://www.info.univ-tours.fr/~antoine/

Administration des bases de données. Jean-Yves Antoine http://www.info.univ-tours.fr/~antoine/ Administration des bases de données Jean-Yves Antoine http://www.info.univ-tours.fr/~antoine/ Administration des bases de données II Objets avancés dans les bases de données OBJECTIFS 2.1. NOTIONS 2.1.1.

Plus en détail

Plan. Bases de Données. Sources des transparents. Bases de SQL. L3 Info. Chapitre 4 : SQL LDD Le langage de manipulation de données : LMD

Plan. Bases de Données. Sources des transparents. Bases de SQL. L3 Info. Chapitre 4 : SQL LDD Le langage de manipulation de données : LMD Plan Bases de Données L3 Info Céline Rouveirol 2010-2011 Bases de Données 1 / 77 Sources des transparents Bases de Données 2 / 77 Bases de SQL - M.P. Dorville/F. Goasdoué, LRI, Université Paris Sud - V.

Plus en détail

1. Base de données SQLite

1. Base de données SQLite Dans ce TP, nous allons voir comment créer et utiliser une base de données SQL locale pour stocker les informations. La semaine prochaine, ça sera avec un WebService. On repart de l application AvosAvis

Plus en détail

La programmation orientée objet Gestion de Connexions HTTP Manipulation de fichiers Transmission des données PHP/MySQL. Le langage PHP (2)

La programmation orientée objet Gestion de Connexions HTTP Manipulation de fichiers Transmission des données PHP/MySQL. Le langage PHP (2) Le langage PHP (2) Walid Belkhir Université de Provence belkhir@cmi.univ-mrs.fr http://www.lif.univ-mrs.fr/ belkhir/ 1 / 54 1 La programmation orientée objet 2 Gestion de Connexions HTTP 3 Manipulation

Plus en détail

PHP et mysql. Code: php_mysql. Olivier Clavel - Daniel K. Schneider - Patrick Jermann - Vivian Synteta Version: 0.9 (modifié le 13/3/01 par VS)

PHP et mysql. Code: php_mysql. Olivier Clavel - Daniel K. Schneider - Patrick Jermann - Vivian Synteta Version: 0.9 (modifié le 13/3/01 par VS) PHP et mysql php_mysql PHP et mysql Code: php_mysql Originaux url: http://tecfa.unige.ch/guides/tie/html/php-mysql/php-mysql.html url: http://tecfa.unige.ch/guides/tie/pdf/files/php-mysql.pdf Auteurs et

Plus en détail

Optimisation SQL. Quelques règles de bases

Optimisation SQL. Quelques règles de bases Optimisation SQL Quelques règles de bases Optimisation des ordres SQL Page 2 1. QUELQUES RÈGLES DE BASE POUR DES ORDRES SQL OPTIMISÉS...3 1.1 INTRODUCTION...3 1.2 L OPTIMISEUR ORACLE...3 1.3 OPTIMISEUR

Plus en détail

Le langage SQL Rappels

Le langage SQL Rappels Le langage SQL Rappels Description du thème : Présentation des principales notions nécessaires pour réaliser des requêtes SQL Mots-clés : Niveau : Bases de données relationnelles, Open Office, champs,

Plus en détail

Intégrité sémantique dans les bases de données relationnelles

Intégrité sémantique dans les bases de données relationnelles Intégrité sémantique dans les bases de données relationnelles 1 - Intégrité sémantique Bernard ESPINASSE Professeur à Aix-Marseille Université (AMU Ecole Polytechnique Universitaire de Marseille Fev. 2013

Plus en détail

Application BdD et JDBC. Introduction 1/28. I Dans tout les cas, une seule problématique. I Quelques alternatives :

Application BdD et JDBC. Introduction 1/28. I Dans tout les cas, une seule problématique. I Quelques alternatives : ntroduction 1/28 2/28 Anne-Cécile Caron Licence MAGE - Bases de Données 2013-2014 Application base de données Pour le développeur : Quel est l environnement? type de client (mode client serveur, intranet,...)

Plus en détail

TP3 : Creation de tables 1 seance

TP3 : Creation de tables 1 seance Universite de Versailles IUT de Velizy - Algorithmique 2005/2006 TP3 : Creation de tables 1 seance Objectif : Creation et modication de tables dans une base de donnees. Avant de commencer ce TP, terminer

Plus en détail

Exercices sur SQL server 2000

Exercices sur SQL server 2000 Exercices sur SQL server 2000 La diagramme de classe : Exercices sur SQL server 2000 Le modèle relationnel correspondant : 1 Créer les tables Clic-droit on Tables et choisir «New Table» Créer la table

Plus en détail

Quelques patterns pour la persistance des objets avec DAO DAO. Principe de base. Utilité des DTOs. Le modèle de conception DTO (Data Transfer Object)

Quelques patterns pour la persistance des objets avec DAO DAO. Principe de base. Utilité des DTOs. Le modèle de conception DTO (Data Transfer Object) Quelques patterns pour la persistance des objets avec DAO Ce cours présente des modèles de conception utilisés pour effectuer la persistance des objets Université de Nice Sophia-Antipolis Version 1.4 30/8/07

Plus en détail

Présentation du PL/SQL

Présentation du PL/SQL I Présentation du PL/ Copyright Oracle Corporation, 1998. All rights reserved. Objectifs du Cours A la fin de ce chapitre, vous saurez : Décrire l intéret du PL/ Décrire l utilisation du PL/ pour le développeur

Plus en détail

Le prototype de la fonction main()

Le prototype de la fonction main() Le prototype de la fonction main() 1. Introduction...1 2. Paramètres et type de retour de la fonction main()...1 3. Exemple 1...2 4. La fonction exit() du C...2 5. Détecter le code de retour d un programme

Plus en détail

Introduction aux Bases de Données 2004/2005

Introduction aux Bases de Données 2004/2005 Introduction aux Bases de Données 2004/2005 Chapitre 6: Le langage SQL Ecole Nationale Supérieur de Physique de Strasbourg Christian Wolf christian.wolf@ensps.u-strasbg.fr 6.1 Stockage physique Film numfil

Plus en détail

PHP 5. La base de données MySql. A. Belaïd 1

PHP 5. La base de données MySql. A. Belaïd 1 PHP 5 La base de données MySql A. Belaïd 1 Base de données C est quoi une base de données? Une base de données contient une ou plusieurs tables, chaque table ayant un ou plusieurs enregistrements Exemple

Plus en détail

A QUOI SERVENT LES BASES DE DONNÉES?

A QUOI SERVENT LES BASES DE DONNÉES? BASE DE DONNÉES OBJET Virginie Sans virginie.sans@irisa.fr A QUOI SERVENT LES BASES DE DONNÉES? Stockage des informations : sur un support informatique pendant une longue période de taille importante accès

Plus en détail

Quelques aspects du Relationnel-Objet du SGBD Oracle

Quelques aspects du Relationnel-Objet du SGBD Oracle Département informatique de l IUT (de l université) de Bordeaux Cours de Bases de Données : présentation partielle d un SGBD RO 12 août 2015 Olivier Guibert Quelques aspects du Relationnel-Objet du SGBD

Plus en détail

Mysql. Les requêtes préparées Prepared statements

Mysql. Les requêtes préparées Prepared statements Mysql Les requêtes préparées Prepared statements Introduction Les prepared statements côté serveur sont une des nouvelles fonctionnalités les plus intéressantes de MySQL 4.1 (récemment sorti en production

Plus en détail

Génie Logiciel avec Ada. 4 février 2013

Génie Logiciel avec Ada. 4 février 2013 Génie Logiciel 4 février 2013 Plan I. Généralités II. Structures linéaires III. Exceptions IV. Structures arborescentes V. Dictionnaires I. Principes II. Notions propres à la POO I. Principes Chapitre

Plus en détail

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

INTRODUCTION A JAVA. Fichier en langage machine Exécutable INTRODUCTION A JAVA JAVA est un langage orienté-objet pur. Il ressemble beaucoup à C++ au niveau de la syntaxe. En revanche, ces deux langages sont très différents dans leur structure (organisation du

Plus en détail

Compétences Business Objects - 2014

Compétences Business Objects - 2014 Compétences Business Objects - 2014 «Mars-Juin 2014. Réf : Version 1 Page 1 sur 34 Sommaire CONTEXTE DE LA REMISE A NIVEAU EN AUTOFORMATION... 3 1. MODELISATION... 4 1.1 DESCRIPTION FONCTIONNEL DE L'APPLICATION

Plus en détail

Pratique et administration des systèmes

Pratique et administration des systèmes Université Louis Pasteur Licence Informatique (L2) UFR de Mathématiques et Informatique Année 2007/2008 1 But du TP Pratique et administration des systèmes TP10 : Technologie LAMP Le but de ce TP est de

Plus en détail

Les bases fondamentales du langage Transact SQL

Les bases fondamentales du langage Transact SQL Les bases fondamentales du langage Transact SQL Version 1.0 Grégory CASANOVA James RAVAILLE http://blogs.dotnet-france.com/jamesr 2 Les bases fondamentales du langage Transact SQL Sommaire 1 Introduction...

Plus en détail

Django et PostgreSQL sous la charge

Django et PostgreSQL sous la charge Django et PostgreSQL sous la charge Rodolphe Quiédeville Pourquoi couper la queue du poulet? RMLL - Beauvais 8 juillet 2015 Rodolphe Quiédeville (PeopleDoc) Django et PostgreSQL sous la charge 8 juillet

Plus en détail

Intégrité des données

Intégrité des données . Contraintes d intégrité : Définition et objectif Intégrité des données Définition des contraintes Vérification des contraintes Contrainte d'intégrité : propriété sémantique que doivent respecter les

Plus en détail

Recherche dans un tableau

Recherche dans un tableau Chapitre 3 Recherche dans un tableau 3.1 Introduction 3.1.1 Tranche On appelle tranche de tableau, la donnée d'un tableau t et de deux indices a et b. On note cette tranche t.(a..b). Exemple 3.1 : 3 6

Plus en détail

OCL - Object Constraint Language

OCL - Object Constraint Language OCL - Object Constraint Language Laëtitia Matignon laetitia.matignon@univ-lyon1.fr Département Informatique - Polytech Lyon Université Claude Bernard Lyon 1 2012-2013 Laëtitia Matignon SIMA - OCL - Object

Plus en détail

Système de Gestion de Bases de Données Relationnelles. MySQL. Youssef CHAHIR

Système de Gestion de Bases de Données Relationnelles. MySQL. Youssef CHAHIR Système de Gestion de Bases de Données Relationnelles MySQL Youssef CHAHIR 1 PLAN Introduction Démarrer MySQL Syntaxe de MySQL Types des attributs Identificateurs Effectuer des requêtes Fonctions de MySQL

Plus en détail

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile Dans ce TP, vous apprendrez à définir le type abstrait Pile, à le programmer en Java à l aide d une interface

Plus en détail

Paginer les données côté serveur, mettre en cache côté client

Paginer les données côté serveur, mettre en cache côté client Paginer les données côté serveur, mettre en cache côté client Vous voulez sélectionner des lignes dans une table, mais celle-ci comporte trop de lignes pour qu il soit réaliste de les ramener en une seule

Plus en détail

Licence ST Université Claude Bernard Lyon I LIF1 : Algorithmique et Programmation C Bases du langage C 1 Conclusion de la dernière fois Introduction de l algorithmique générale pour permettre de traiter

Plus en détail

Administration des bases de données

Administration des bases de données Administration des bases de données Mehdi Louizi 1 Pourquoi PL/SQL 2 Pourquoi PL/SQL? PL/SQL = PROCEDURAL LANGUAGE/SQL SQL est un langage non procédural Les traitements complexes sont parfois difficiles

Plus en détail

Arbres binaires de recherche

Arbres binaires de recherche 1 arbre des comparaisons 2 recherche dichotomique l'arbre est recalculé à chaque recherche 2 5 3 4 7 9 1 6 1 2 3 4 5 6 7 9 10 conserver la structure d'arbre au lieu de la reconstruire arbre binaire de

Plus en détail

TD3: tableaux avancées, première classe et chaînes

TD3: tableaux avancées, première classe et chaînes TD3: tableaux avancées, première classe et chaînes de caractères 1 Lestableaux 1.1 Élémentsthéoriques Déclaration des tableaux Pour la déclaration des tableaux, deux notations sont possibles. La première

Plus en détail

TP Programmation Java / JDBC / Oracle

TP Programmation Java / JDBC / Oracle TP Programmation Java / JDBC / Oracle 1. Connectivité avec une base de données Oracle au travers de l interface JDBC L interface de programmation (API) JDBC (Java DataBase Connectivity) est une librairie

Plus en détail

Bases de programmation. Cours 5. Structurer les données

Bases de programmation. Cours 5. Structurer les données Bases de programmation. Cours 5. Structurer les données Pierre Boudes 1 er décembre 2014 This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 3.0 License. Types char et

Plus en détail

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java Info0101 Intro. à l'algorithmique et à la programmation Cours 3 Le langage Java Pierre Delisle, Cyril Rabat et Christophe Jaillet Université de Reims Champagne-Ardenne Département de Mathématiques et Informatique

Plus en détail

Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples

Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation impérative et structures de données simples Introduction au langage C Sandrine Blazy - 1ère année 24 octobre 2007 Cours d Algorithmique-Programmation

Plus en détail

LE LANGAGE SQL2 1. INTRODUCTION

LE LANGAGE SQL2 1. INTRODUCTION LE LANGAGE SQL2 1. INTRODUCTION Les serveurs de données relationnels présentent aujourd hui une interface externe sous forme d un langage de recherche et mise à jour, permettant de spécifier les ensembles

Plus en détail

Introduction au Système de Gestion de Base de Données et aux Base de Données

Introduction au Système de Gestion de Base de Données et aux Base de Données Introduction au Système de Gestion de Base de Données et aux Base de Données Formation «Gestion des données scientifiques : stockage et consultation en utilisant des bases de données» 24 au 27 /06/08 Dernière

Plus en détail