2%.!. 435.6" ' % ' 57535.68 : 451&.;55"6 5% 9< (=6&0> =6&0 ) :(=6&0> =6&0=)' # (% $!:# % 0 #$ 0' %



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

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

TP Contraintes - Triggers

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

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

Devoir Data WareHouse

Bases de données avancées

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

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

Les Triggers SQL. Didier DONSEZ. Université de Valenciennes Institut des Sciences et Techniques de Valenciennes

Corrigés détaillés des exercices

Le Langage De Description De Données(LDD)

Historisation des données

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

A QUOI SERVENT LES BASES DE DONNÉES?

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

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

Olivier Mondet

SQL Historique

TD : Requêtes SQL (BDR.TD2-1) INSA 3IF

Le Langage SQL version Oracle

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

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

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

Bases de données relationnelles

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

TP3 : Creation de tables 1 seance

Bases de Données Avancées PL/SQL

Gestion de base de données

CREATION WEB DYNAMIQUE

A QUOI SERVENT LES BASES DE DONNÉES?

Langage SQL : créer et interroger une base

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

SQL sous SqlServer OLIVIER D. DEHECQ Olivier 0

Partie 0 : Gestion des tablespace et des utilisateurs... 3

Auto-évaluation Oracle: cours de base

1. Base de données SQLite

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

Création et Gestion des tables

OpenPaaS Le réseau social d'entreprise

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

NFA 008. Introduction à NoSQL et MongoDB 25/05/2013

Attaques applicatives

Procédures Stockées WAVESOFT ws_sp_getidtable Exemple : ws_sp_getnextsouche Exemple :... 12

Java et les bases de données: JDBC: Java DataBase Connectivity SQLJ: Embedded SQL in Java. Michel Bonjour

SQL. Oracle. pour. 4 e édition. Christian Soutou Avec la participation d Olivier Teste

Introduction au PL/SQL Oracle. Alexandre Meslé

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

Les bases de données

Gestion des utilisateurs et de leurs droits

Introduction aux Bases de Données 2004/2005

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

Gestion des transactions et accès concurrents dans les bases de données relationnelles

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

Bases de Données Réparties

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

Compétences Business Objects

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

MS SQL Express 2005 Sauvegarde des données

Panorama des Bases de Données

Bases de Données Avancées

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

Intégrité des données

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

ISC Système d Information Architecture et Administration d un SGBD Compléments SQL

BASES DE DONNEES TP POSTGRESQL

FileMaker 13. Guide de référence SQL

SGBDR. Systèmes de Gestion de Bases de Données (Relationnelles)

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

PROJET 1 : BASE DE DONNÉES REPARTIES

Oracle Le langage procédural PL/SQL

Le langage SQL Rappels

Quelques aspects du Relationnel-Objet du SGBD Oracle

Administration des bases de données. Jean-Yves Antoine

Sybase Adaptive Server Enterprise 15

Utilisation de JAVA coté Application serveur couplé avec Oracle Forms Hafed Benteftifa Novembre 2008

Présentation Windows Azure Hadoop Big Data - BI

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

I. MySQL : Serveur et SGBD

Bases de Données Avancées

Modélisation PHP Orientée Objet pour les Projets Modèle MVC (Modèle Vue Contrôleur) Mini Framework

Cours Base de données relationnelles. M. Boughanem, IUP STRI

Table des matières PRESENTATION DU LANGAGE DS2 ET DE SES APPLICATIONS. Introduction

NF26 Data warehouse et Outils Décisionnels Printemps 2010

Optimisation SQL. Quelques règles de bases

I4 : Bases de Données

Bases de données et sites WEB

Hala Skaf-Molli. Nancy-Université 14 mai 2007

1 Position du problème

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)

Chapitre 3 LE MODELE RELATIONNEL ET SQL (DDL)

Bases de données. Mihaela Mathieu

UML et les Bases de Données

INSTITUT NATIONAL DES TELECOMMUNICATIONS CONTROLE DES CONNAISSANCES. 2. Les questions sont indépendantes les unes des autres.

La présente publication est protégée par les droits d auteur. Tous droits réservés.

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

Systèmes de Gestion de Bases de Données

16H Cours / 18H TD / 20H TP

Transcription:

!"# $ % # % % &'! " # "#$#!%&#$ ($ $"% * +&% '# &,&-. /. &0. 1. 2%.!. ( *0.+,-+.+, /0333 (# + 1 435.6" ' % ' 57535.68 5# 59%,&$ : 451&.;55"6 5% 9< (=6&0> =6&0 :(=6&0> =6&0=' # (% $!:# % 0 #$ 0' % 6##( # ": 22% 5' # (% 6":# 22 2..

/ ##(<:' $ :' %' 5&5=&9379156.16%51&.;55? (< $ # 59@%,& (359@%,&( / #59@%,&(<:' $ :' %' 5&5=379156.16%51&.;55? 9A (< $ # 59@%,& (359@%,&(-, / #59@%,&(<:' /# 4 5 ' $ ' 46% ##$ BB@C# # 6B 6B@ C%% & 4 #<% &# 46 %74: " :6( '44# 0 9# "DDDDE%(F @0 9# :4#GHD@HIG 2DHDHIIG% (@ 20 9# JKL:%(@ M0 9# 'K:% (D F0 9# #M% N0 9# #M:#% ( G0 9# "K:%(N O0 9# %9#K: '<:%.'%(DG '4 0&-3 "56 "' # "5"5 # "'"5 (F

"5 "'4% 0&274( " 86$9:' "( #P<% I0 9# #4 < A % (F D0 9# %(O 0 9#: %(N @0 4: #% (I 20 9# 4# K* : : % (@M M0 #4: ' % (I F0 #" DDDDE% (F # 0 6# 4=.796;( @0,44 :. 20 64( :.(" M0 4(' F0 6# 49&&39B&59&&39B3=.&17% N0 6'J:44L.B :6%

! 4. ' 6 (6 :444" # 51&.;55(: 207+,637915&937915519&.75371B5665395L.B39&96;=.11.73= =.765(2*-07+,=.76;37915 596157,(:-7+,59615737915 &.=9.73 L.B;2/7+,L.B3&51739&96;19>39&96; L.B3.6; (: 207+,(7,(57395 &.=9.7 (2(+2-7+,6553965.9&3=.5=;9536./7=5 65Q.7(<+2-7+,65Q.737915 &# 0%4": 5=6B5:4(: :20 77&&R 000000000000000000000000000000000000000000000000000000000000000000000 51&.;5537.7&&71B56(N 637915/96=96@(@D &9379157.7&&/96=96@(@F 519&7.7&&/96=96@(@F.75371B56/96=96@(@D 653957.7&&95 L.B37.7&&/96=96@(D 9&96;71B56(O@ =.11.73=71B56(@@ 1979Q56371B56(N 596157371B56(M

00 2*-+ 77&&R 000000000000000000000000000000000000000000000000000000000000000000000 =.76;37.7&&=96(@ =.76;37915/96=96@(MD 65Q.73 71B56 00 :,(:- 77&&R 000000000000000000000000000000000000000000000000000000000000000000000 59615737.7&&71B56(M 596157379157.7&&/96=96@(2D 1979Q56371B56(N &.=9.7371B56(M 00 ;2/ 77&&R 0000000000000000000000000000000000000000000000000000000000000000000000 L.B37.7&&/96=96@(D L.B3&57.7&&/96=96@(2F 1739&96;71B56(N 19>39&96;71B56(N 00 ;2/74+20 77&&R 0000000000000000000000000000000000000000000000000000000000000000000 51&.;5537.7&&71B56(N 963957.7&&95 573957.7&&95 L.B37.7&&/96=96@(D 596157371B56(M 009 2(+2-77&&R 000000000000000000000000000000000000000000000000000000000000000000000 &.=9.737.7&&71B56(M 6553965/96=96@(MD.9&3=.5/96=96@(@ =;7.7&&/96=96@(2D 9536./7=5/96=96@(@F =.76;3=96(@ 007( <+2-77&&R 000000000000000000000000000000000000000000000000000000000000000000000 65Q.737.7&&71B56 65Q.737915/96=96@(@F

(# 0 6# 4=.796; @0,44 :. 5&5==.7(-6.1= 20 64( :.(1 = M0 6# 49&&39B&59&&39B3=.&17% F0 6'J:44L.B :6% -1 #(:4 1 #@(5=6B5 /# 4 &937915 0000000000000000000000000 S S## 6#

F( (% 4!"!## $%!!## &937915 0000000000000000000000000 9 =# 4 B =# 5 @( (% &' &937915 0000000000000000000000000 L# L &''' &937915 0000000000000000000000000 4 B # D( (% ( &937915 0000000000000000000000000 S# B 4 =

+#38M3? 59615737915 000000000000000000000000000000 # * +,--.+ 59615737915 000000000000000000000000000000 6 1T 46 # N( (% # * "/ / *###0*0 &937915=.11.7 00000000000000000000000000000000000000000 QD%F L#D%D Q # B =4 %%%% DG( (% A / 0 / "(/00 7.1 0000000000000000000000000

' Q! 1 1 1+. %%% F( (% T 1 *1 (1 &937915 0000000000000000000000000 =4 5!! Q4 6 / * UT C O( (% 2 / 3 0 59615737915 000000000000000000000000000000 =' 6 C N( (% / 0* * ( =.7(51&.;553L.B3&5 00000000000000000000000000000000000000000000000000000 F9 91 99

@9/ 1 66 1T1 1T6 C I( (% * * * * $/ 0 &9379156553965 00000000000000000000000000000000000000000000000000000000000000000 =; 000000000000000000000000000000 6A@DB # S1=#.'T.' 1=#.'T.' #@DB # B @DB # %%% @M( (% 0 * /0 * $2 ( L.B3&5=.7(5%51&.;553 0000000000000000000000000000000000000000000000000000000 9M 91 99 9/@ 1 66 1T1 1T6

F C I( (% */0 * ( "(/0$ L.B3&51(5%9&96; 000000000000000000000000000000000000000000000000 99MMDD 66NFDD 1T6NDDD 49O2DD 466DDDD

Université Henri Poincaré UFR STMIA Dept Informatique TP 2 SQL LDD et Contraintes /* On souhaite créer les schémas des relations suivantes : 1- Créer les schémas de ces relations. */ /* Ces schémas sont complétés par les contraintes d intégrité suivantes : */ - les attributs soulignés sont les clés primaires des relations. - les attributs en italique sont les clés étrangères - le triplet (nopers, noposte,noservice a une valeur unique pour chaque tuple d AFFECTATION ; noservice peut être null contrairement aux deux premiers attributs - l attribut nochef dans SERVICE contient un numéro de personne (attribut nopers de PERSONNE - les valeurs des attributs suivants ne sont pas obligatoires : prenom, salaire, nochef, rue, salairemin, salairemax, finservice (et AFFECTATION.noservice - la ville par défaut dans la table LOCALISATION est Paris - pour une affectation donnée, la date de fin de service (finservice est postérieure à celle de début de service (debservice create table PERSONNE ( nopers number(6 primary key, prenom varchar2(20, nom2fam varchar2(25 not null create table SERVICE ( noservice number(4 primary key, nomservice varchar2(30, noloc number(6 references LOCALISATION(noloc, nochef number(6 references PERSONNE(nopers create table LOCALISATION ( noloc number(6 primary key, rue varchar2(40 not null, ville varchar2(30 default Paris create table POSTE (noposte varchar2(10 primary key, nomposte varchar2(35 create table SALAIRE (noposte varchar2(10, noservice number(4,0, salairemin number(6, salairemax number(6 constraint CleSalaire primary key(noposte, noservice

create table AFFECTATION ( nopers number(6 not null primary key, noposte varchar2(10 not null, noservice number(4, debservice date, finservice date, salaire number(8, Constraint unicite (nopers, noposte, noservice unique, Constraint SurDate check (debservice < finservice 2- Retrouver quelques informations sur le schéma de la table PERSONNE (a En interrogeant la tables USER_ TAB_COLUMNS du dictionnaire, afficher le nom de chaque colonne (ou attribut, son type, la possibilté de valeur NULL (cf. attribut NULLABLE de la table USER_ TAB_COLUMNS. (b (b Retrouver les mêmes informations en utilisant la fonction DESCRIBE. 3- Insérer dans les tables créées des données provenant de certaines tables HR (a Insérer dans la table PERSONNE les informations utiles concernant tous les employés de la table EMPLOYEES de l utilisateur HR (107 tuples. N.B. : first_name correspond au prénom. INSERT INTO PERSONNE (select v«les BONNES COLONNES DE LA RELATION HR.EMPLOYEES» FROM HR.EMPLOYEES Idem pour les questions ci-dessous (b Peupler les tables SERVICE, LOCALISATION et POSTE à partir des tuples des tables HR.DEPARTMENTS, HR.LOCATIONS et HR.JOBS. (c Initialiser la table SALAIRE à partir du produit cartésien des tables HR.JOBS et SERVICE. On supposera, dans un premier temps, que les salaires minimum et maximum ne dépendent que du numéro du poste (et pas du service. (d Peupler la table AFFECTATION à partir de la table HR.EMPLOYEES en initialisant à NULL la date de fin de service. 4- Mettre à jour ponctuellement les tables (a Augmenter de 2% le salaire minimum pour tous les postes du service IT Support. UPDATE SALAIRE set salairemin = 1.02*salairemin FROM SALAIRE s1, service s2, poste p Where upper(p.nomservice like upper( IT Support and p.noservice = s1.noservice and s1.noposte = p.noposte (b Supprimer de la table SALAIRE les tuples concernant les postes dont le nom commence par Sales dans les services dont le nom ne comporte pas sales. Similaire à la question précédente avec DELETE FROM... WHERE... Avec upper(nomposte like upper( %sales% And upper(nomservice not like upper(%sales%

(c Supprimer le poste intitulé Purchasing Manager de la table POSTE. Que se passe-til? Renoncer à la mise à jour. 5- Modifier le schéma de certaines tables (a Ajouter un attribut obsolète à la table POSTE qui aura deux valeurs possibles V ou F selon qu un poste est obsolète ou non. La valeur par défaut sera F. ALTER TABLE POSTE ADD(obsolete char(1 check obsolete in( V, F DEFAULT F (b Reconsidérer la question 4.c- après cette modification du schéma de POSTE : modifier les tables AFFECTATION, SALAIRE et POSTE de façon à pourvoir tenir compte de la suppression de cette fonction dans l entreprise. Il faut garder les postes devenus obsolètes, mettre un terme aux affectations les concernant et supprimer les salaires relatifs aux postes obsolètes. Vérifier. (c Ajouter un attribut COURRIEL à la table PERSONNE dont confidentiel sera la valeur par défaut. Vérifier. Voir (a (d Renseigner l attribut COURRIEL à partir de l attribut EMAIL de la table HR.EMPLOYEES en complétant chaque valeur de email par la chaîne @technissimo.fr. Vérifier. UPDATE PERSONNE set COURRIEL = HR.EMPLOYEES.EMAIL @technissiomo.fr 6- Supprimer le schéma de toutes les tables créées.

Université de Lorraine Campus Sciences, FST, Département informatique TP PL/SQL Sommaire : I. Initiation à PL/SQL II. Comprendre le passage de paramètres en PL/SQL I. Initiation à PL/SQL 1. Ecrire un bloc PL/SQL qui affiche Bonjour, je suis Votre Login Oracle Nous sommes le : Date du jour (sous la forme N -du-jour Nom-du-mois Année set serveroutput on; begin dbms_output.put_line('bonjour'; dbms_output.put_line('je suis : ' user; dbms_output.put_line('nous sommes le : ' to_char(sysdate,'dd month yyyy'; end; 2. Tableaux et itérations : Créer un tableau et le remplir par les valeurs 2, 4, 6,, 20 imprimer son contenu dans l'ordre inverse (20, 18,, 2 sous la forme T[i] = valeur. set serveroutput on; declare type type2tableau is table of int not null index by binary_integer; T type2tableau; begin for i in 0..10 loop T(i := 2*i; end loop; for j in reverse 0..10 loop dbms_output.put_line('t[' j '] = ' T(j; end loop; end; 3. Une table produit et une table stock existent ; elles sont la propriété de nacerb et tout utilisateur a le droit de les interroger. Leur schéma est le suivant : SQL> desc produit

Name Null? Type ----------------------------------------- -------- ---------------------------- PROD# NOT NULL NUMBER(38 LIBELLE VARCHAR2(20 PU NOT NULL FLOAT(126 SQL> desc stock Name Null? Type ----------------------------------------- -------- ---------------------------- PROD# NOT NULL NUMBER(38 DEP# NOT NULL NUMBER(38 QTE NOT NULL NUMBER(38 3.1. Créer les mêmes tables avec leur contenu. SQL> create table produit as (select * from nacerb.produit ; SQL> create table stock as (select * from nacerb.stock; 3.2. Ajouter une colonne TotalEnStock à la relation produit : SQL> alter table produit add (Total_Stock int; 3.3. Instancier cette colonne par la quantité totale en stock pour chaque produit SQL> update produit set 2 Total_Stock = (select sum(qte from stock s 3 where s.prod# = produit.prod# 4 group by s.prod#; 2000 ligne(s mise(s à jour. 3.3. Programmer et mettre au point un bloc anonyme qui permet d obtenir les 3 produits ayant les plus grandes quantités en stock. -- Bloc affichant les 3 produits les plus vendus -- NE PAS OUBLIER: set serveroutput on; declare lib produit.libelle%type; -- prix produit.pu%type; ventes produit.total_des_ventes%type; cursor C is select libelle, Total_Des_Ventes from produit order by Total_Des_Ventes desc; begin dbms_output.put_line('--- Begin'; open C; if C%ISOPEN then dbms_output.put_line('--- ISOPEN = Vrai'; for i in 1..3 loop dbms_output.put_line('--- Avant fetch'; fetch C into lib, ventes; if C%found then dbms_output.put_line('produit: ' lib; dbms_output.put_line('vendu en : ' ventes ' exemplaires.';

else dbms_output.put_line('relation vide; Nbr de tuples = ' i; end if; end loop; else dbms_output.put_line('erreur sur open curseur'; end if; close C; end; 3.4. Transformer le bloc de la question précédente en une procédure Top_stock qui permet d obtenir les n produits les plus présents en stock, n étant un paramètre de la procédure. create or replace procedure i_produit_min (i IN int /*----------------------------------------------------*/ /* Sortir les i produits ayant les plus hauts niveaux en stock */ /* Exemple d'invocation: exec i_produit_min(3; */ /*----------------------------------------------------*/ as NomProd produit.libelle%type; Qte stock.qte%type; j number; cursor MonCurseur is select s.prod#, sum(qte "Total" from produit p, stock s where p.prod# = s.prod# group by s.prod# order by sum(qte desc; begin open MonCurseur; j := i; fetch MonCurseur into NomProd, Qte; while (j > 0 and MonCurseur%FOUND loop DBMS_OUTPUT.PUT_LINE('Somme des stocks du produit ' NomProd ': ' TO_CHAR(Qte, '99999999'; fetch MonCurseur into NomProd, Qte; j := j - 1; end loop; close MonCurseur; end; II. Comprendre le mode de passage de paramètres 1. Ecrire et mettre au point une procédure P ayant 3 paramètres x1, x2, x3 passés respectivement en mode IN, INOUT et OUT. Cette procédure réalise les actions suivantes : Affiche les valeurs des paramètres sous la forme : Valeurs des paramètres en entrée de P : - x1 (in = Valeur de x1 - x2 (in out = Valeur de x2

- x3 (out = Valeur de x3 Incrémente x1 de 1, x2 de 10 et affecte 300 à x3 Affiche les valeurs des paramètres sous la forme : Valeurs des paramètres en sortie de P : - x1 (in = Valeur de x1 - x2 (in out = Valeur de x2 - x3 (out = Valeur de x3 create or replace procedure P(x1 in int, x2 in out int, x3 out int /*-- Test des modes de passage des parametres --*/ as begin dbms_output.put_line('x1 (in = ' x1 ' (valeur au debut de P'; dbms_output.put_line('x2 (in out = ' x2 ' (valeur au debut de P'; dbms_output.put_line('x3 (out = ' x3 ' (valeur au debut de P'; -- x1 := x1 + 1; -- PLS-00363: expression 'X1' ne peut être utilisée comme cible -- d'affectation x2 := x2 + 10; x3 := 200; dbms_output.put_line('x1 (in = ' x1 ' (valeur a la fin de P'; dbms_output.put_line('x2 (in out = ' x2 ' (valeur a la fin de P'; dbms_output.put_line('x3 (out = ' x3 ' (valeur a la fin de P'; end; 2. Ecrire un bloc PL/SQL qui appelle la procédure P avec des paramètres Y1, Y2, Y3 et qui affiche les valeurs de Y1, Y2, Y3 avant et après l appel à P sous la même forme que P. Commenter et démontrer les résultats. declare Y1 int; Y2 int; Y3 int; begin Y1 := 1; Y2 := 20; Y3 := 0; dbms_output.put_line('y1 (in = ' Y1 ' (valeur avant appel de P'; dbms_output.put_line('y2 (in out = ' Y2 ' (valeur avant appel de P'; dbms_output.put_line('y3 (out = ' Y3 ' (valeur avant appel de P'; dbms_output.put_line('-- Le bloc appelle la procedure P :'; P(Y1, Y2, Y3; dbms_output.put_line('-- retour dans le bloc apres appel de la procedure P :'; dbms_output.put_line('y1 (in = ' Y1 ' (valeur au retour de P'; dbms_output.put_line('y2 (in out = ' Y2 ' (valeur au retour de P'; dbms_output.put_line('y3 (out = ' Y3 ' (valeur au retour de P'; end; Exécution : -- Trace de l'exécution (Ne pas oublier set serveroutput on Y1 (in = 1 (valeur avant appel de P Y2 (in out = 20 (valeur avant appel de P Y3 (out = 0 (valeur avant appel de P -- Le bloc appelle la procedure P : x1 (in = 1 (valeur au debut de P x2 (in out = 20 (valeur au debut de P x3 (out = (valeur au debut de P x1 (in = 1 (valeur a la fin de P x2 (in out = 30 (valeur a la fin de P

x3 (out = 200 (valeur a la fin de P -- retour dans le bloc apres appel de la procedure P : Y1 (in = 1 (valeur au retour de P Y2 (in out = 30 (valeur au retour de P Y3 (out = 200 (valeur au retour de P Procédure PL/SQL terminée avec succès.