• Aucun résultat trouvé

[PDF] Cours de PL/SQL pour débutant en pdf | Formation informatique

N/A
N/A
Protected

Academic year: 2021

Partager "[PDF] Cours de PL/SQL pour débutant en pdf | Formation informatique"

Copied!
7
0
0

Texte intégral

(1)

PL/SQL

Marc Plantevit

marc.plantevit@liris.cnrs.fr

Pourquoi PL/SQL ?

PL/SQL = PROCEDURAL LANGUAGE/SQL

SQL est un langage non proc´edural

Les traitements complexes sont parfois difficiles `a ´ecrire si on ne peut utiliser des variables et les structures de

programmation comme les boucles et les alternatives On ressent vite le besoin d’un langage proc´edural pour lier plusieurs requˆetes SQL avec des variables et dans les structures de programmation habituelles

2 Le Langage PL/SQL Commandes Les curseurs Les exceptions Proc´edures et fonctions Triggers

Principales Caract´

eristiques

Extension de SQL : des requˆetes SQL cohabitent avec les

structures de contrˆole habituelles de la programmation structur´ee (blocs, alternatives, boucles).

La syntaxe ressemble au langage Ada ou Pascal.

Un programme est constitu´e de proc´edures et de fonctions.

Des variables permettent l’´echange d’information entre les

requˆetes SQL et le reste du programme

3 Le Langage PL/SQL Commandes Les curseurs Les exceptions Proc´edures et fonctions Triggers

Utilisation de PL/SQL

PL/SQL peut ˆetre utilis´e pour l’´ecriture des proc´edures stock´ees et des triggers.

Oracle accepte aussi le langage Java.

Il convient aussi pour ´ecrire des fonctions utilisateurs qui peuvent ˆetre utilis´ees dans les requˆetes SQL (en plus des fonctions pr´ed´efinies).

Il est aussi utilis´e dans des outils Oracle Ex : Forms et Report.

4 Le Langage PL/SQL Commandes Les curseurs Les exceptions Proc´edures et fonctions Triggers

Utilisation de PL/SQL (suite)

Le PL/SQL peut ˆetre utilis´e sous 3 formes :

1 un bloc de code, ex´ecut´e comme une unique commande SQL,

via un interpr´eteur standard (SQLplus ou iSQL*PLus)

2 un fichier de commande PL/SQL

3 un programme stock´e (proc´edure, fonction, trigger)

5 Le Langage PL/SQL Commandes Les curseurs Les exceptions Proc´edures et fonctions Triggers

Blocs

Un programme est structur´e en blocs d’instructions de 3

types :

proc´edures ou bloc anonymes, proc´edures nomm´ees, fonctions nomm´ees.

Un bloc peut contenir d’autres blocs.

Consid´erons d’abord les blocs anonymes.

7 Le Langage PL/SQL Commandes Les curseurs Les exceptions Proc´edures et fonctions Triggers

Structure d’un bloc anonyme

DECLARE

-- d´efinition des variables

BEGIN

-- code du programme EXCEPTION

-- code de gestion des erreurs

END ;

Seuls BEGIN et END sont obligatoires Comme les instruction SQL, les blocs se terminent par un ;

8 Le Langage PL/SQL Commandes Les curseurs Les exceptions Proc´edures et fonctions Triggers

eclaration, initalisation des variables

Identificateurs Oracle : 30 caract`eres au plus, commence par une lettre,

peut contenir lettres, chiffres, , $ et # pas sensible `a la casse.

Port´ee habituelle des langages `a blocs Doivent ˆetre d´eclar´ees avant d’ˆetre utilis´ees

9 Le Langage PL/SQL Commandes Les curseurs Les exceptions Proc´edures et fonctions Triggers

(2)

D´eclaration et initialisation

Nom variable type variable := valeur ; Initialisation

Nom variable := valeur ;

D´eclarations multiples interdites.

Exemples : age integer ; nom varchar(30) ; dateNaissance date ; ok boolean := true ; 10 Le Langage PL/SQL Commandes Les curseurs Les exceptions Proc´edures et fonctions Triggers

Plusieurs fa¸

cons d’affecter une valeur `

a une variable

Op´erateur d’affectation n :=.

Directive INTO de la requˆete SELECT.

Exemple

dateNaissance :=

to date(’10/10/2004’,’DD/MM/YYYY’) ; SELECT nom INTO v nom

FROM emp

WHERE matr = 509 ;

 Pour ´eviter les conflits de nommage, pr´efixer les variables PL/SQL par v

11 Le Langage PL/SQL Commandes Les curseurs Les exceptions Proc´edures et fonctions Triggers

SELECT . . . INTO . . .

SELECT expr1,expr2, . . . INTO var1, var2, . . .

Met des valeurs de la BD dans une ou plusieurs variables var1, var2, . . .

Le select ne doit retourner qu’une seule ligne

Avec Oracle il n’est pas possible d’inclure un select sans

into dans une proc´edure.

Pour retourner plusieurs lignes, voir la suite du cours sur les curseurs.

12 Le Langage PL/SQL Commandes Les curseurs Les exceptions Proc´edures et fonctions Triggers

Types de Variables

VARCHAR2

Longueur maximale : 32767 octets ; Syntaxe : Nom variable VARCHAR2(30) ; Exemples :

name VARCHAR2(30) ; name VARCHAR2(30) := ’toto’ ;

NUMBER(long,dec)

Long : longueur maximale ; Dec : longueur de la partie d´ecimale ; Exemples :

num telnumber(10) ; toto number(5,2)=142.12 ;

13 Le Langage PL/SQL Commandes Les curseurs Les exceptions Proc´edures et fonctions Triggers

DATE

Par d´efaut DD-MON-YY (18-DEC-09) ;

Fonction TO DATE ; Exemples :

start date := to date(’29-SEP-2003’,’DD-MONYYYY’) ; start date :=

to date(’29-SEP-2003 :13 :01’,’DD-MONYYYY :HH24 :MI’) ;

BOOLEAN

TRUE FALSE NULL

14 Le Langage PL/SQL Commandes Les curseurs Les exceptions Proc´edures et fonctions Triggers

eclaration %TYPE et %ROWTYPE

v nom emp.nom.%TYPE ;

On peut d´eclarer qu’une variable est du mˆeme type qu’une colonne d’une table ou (ou qu’une autre variable).

v employe emp%ROWTYPE ;

Une variable peut contenir toutes les colonnes d’un tuple d’une table (la variable v employe contiendra une ligne de la table emp.

15 Le Langage PL/SQL Commandes Les curseurs Les exceptions Proc´edures et fonctions Triggers

Exemple

DECLARE -- D´eclaration v employe emp%ROWTYPE ; v nom emp.nom.%TYPE ; BEGIN

SELECT * INTO v employe FROM emp WHERE matr = 900 ; v nom := v employe.nom ;

v employe.dept := 20 ; . . .

/* On ins`ere un tuple dans la base*/

INSERT into emp VALUES v employe ; END ;

V´erifiez `a bien retourner un seul tuple avec la requˆete SELECT ... INTO ...

16 Le Langage PL/SQL Commandes Les curseurs Les exceptions Proc´edures et fonctions Triggers

Test Conditionnel

IF-THEN

IF v date > ’01-JAN-08’ THEN v salaire := v salaire * 1.15 ; END IF ;

IF-THEN-ELSE

IF v date > ’01-JAN-08’ THEN v salaire := v salaire * 1.15 ; ELSE

v salaire := v salaire * 1.05 ; END IF ;

IF-THEN-ELSIF

IF v nom = ’PARKER’ THEN v salaire := v salaire * 1.15 ; ELSIF v nom = ‘SMITH’ THEN v salaire := v salaire * 1.05 ;

(3)

CASE

CASE s´electeur

WHEN expression1 THEN r´esultat1

WHEN expression2 THEN r´esultat2

ELSE r´esultat3

END ;

Le CASE renvoie une valeur qui vaut r´esultat1 ou r´esultat2 ou . . . Ce n’est pas une instruction.

Exemple

val := CASE city

WHEN ’TORONTO’ THEN ’RAPTORS’ WHEN ’LOS ANGELES’ THEN ‘LAKERS’ WHEN ’SAN ANTONIO’ THEN ’SPURS’ ELSE ’NO TEAM’

END ;

19 Le Langage PL/SQL Commandes Les curseurs Les exceptions Proc´edures et fonctions Triggers

Les Boucles

LOOP

instructions ex´ecutables ;

EXIT[WHEN condition] ;

instructions ex´ecutables ;

END LOOP ;

Obligation d’utiliser la commande EXIT pour ´eviter une boucle infinie, facultativement quand une condition est vraie.

WHILE condition LOOP

instructions ex´ecutables ;

END LOOP ;

-- Tant que la condition est vraie ...

20 Le Langage PL/SQL Commandes Les curseurs Les exceptions Proc´edures et fonctions Triggers

FOR

FOR variable IN debut .. fin LOOP

instructions ; END LOOP ;

La variable de boucle prend successivement les valeurs de debut, debut + 1, debut + 2, . . ., jusqu’`a la valeur fin.

On pourra ´egalement utiliser un curseur dans la clause IN

(dans quelques slides).

21 Le Langage PL/SQL Commandes Les curseurs Les exceptions Proc´edures et fonctions Triggers

Affichage

Activer le retour ´ecran :

set serveroutput on size 10000

Affichage

dbms output.put line(cha^ıne) ; Utilise || pour faire une concat´enation.

22 Le Langage PL/SQL Commandes Les curseurs Les exceptions Proc´edures et fonctions Triggers

Exemple

set serveroutput on DECLARE i number(2) ; BEGIN FOR i IN 1..5 LOOP dbms output.put line(’Nombre : ’ || i) ; END LOOP ; END ; /

Si ’/’ seul sur une ligne : fin d’une d´efinition (d´eclenche l’´evaluation).

23 Le Langage PL/SQL Commandes Les curseurs Les exceptions Proc´edures et fonctions Triggers

Exemple bis

DECLARE

compteur number(3) ; i number(3) ; BEGIN

select count(*) into compteur from EtudiantLIF10 ; FOR i IN 1..compteur LOOP

dbms output.put line(’Nombre : L3IF ’ || i ) ; END LOOP ;

END ;

24 Le Langage PL/SQL Commandes Les curseurs Les exceptions Proc´edures et fonctions Triggers

Overview

Toutes les requˆetes SQL sont associ´ees `a un curseur. Ce curseur repr´esente la zone m´emoire utilis´ee pour parser (analyser) et ex´ecuter la requˆete.

Le curseur peut ˆetre implicite(pas d´eclar´e par l’utilisateur) ou explicite/

Les curseurs explicites servent `a retourner plusieurs lignes avec un select.

26 Le Langage PL/SQL Commandes Les curseurs Les exceptions Proc´edures et fonctions Triggers

Attributs des curseurs

Tous les curseurs ont des attributs que l’utilisateur peut utiliser.

%ROWCOUNT :

Nombre de lignes trait´ees par le curseur

%FOUND

Vrai si au moins une ligne a ´et´e trait´ee par la requˆete ou le dernier fetch.

%NOTFOUND

Vrai si aucune ligne n’a ´et´e trait´ee par la requˆete ou le dernier fetch

%ISOPEN

Vrai si le curseur est ouvert (utile seulement pour les curseurs explicites)

27 Le Langage PL/SQL Commandes Les curseurs Les exceptions Proc´edures et fonctions Triggers

(4)

Les curseurs implicites

Les curseurs implicites sont tous nomm´es SQL

Exemple

DECLARE

nb lignes integer ; BEGIN

delete from emp where dept = 10 ; nb lignes := SQL%ROWCOUNT ; ...

END ;

28 Le Langage PL/SQL Commandes Les curseurs Les exceptions Proc´edures et fonctions Triggers

Les curseurs explicites

 Pour traiter les select qui renvoient plusieurs lignes.

Ils doivent ˆetre d´eclar´es.

Le code doit les utiliser explicitement avec les ordres OPEN, FETCH et CLOSE

OPEN moncurseur : ouvre le curseur.

FETCH moncurseur : avance le curseur `a la ligne suivante. OPEN moncurseur : referme le curseur.

Le plus souvent on les utilise dans une boucle dont on sort quand l’attribut NOTFOUND du curseur est vrai. On les utilise aussi dans une boucle FOR qui permet une utilisation implicite des instructions OPEN, FETCH et CLOSE.

29 Le Langage PL/SQL Commandes Les curseurs Les exceptions Proc´edures et fonctions Triggers

Exemple Curseurs Explicites

BEGIN

open salaires ; LOOP

FETCH salaires into salaire ; EXIT when salaires%notfound ; IF salaire is not null THEN total := total + salaire ; DBMS OUTPUT.put line(total) ; END IF ; END LOOP ; CLOSE salaires ; DBMS OUTPUT.put line(total) ; END ;

Ne pas oublier de fermer le curseur.

30 Le Langage PL/SQL Commandes Les curseurs Les exceptions Proc´edures et fonctions Triggers

Type Row associ´

e `

a un curseur

On peut d´eclarer un typerow associ´e `a un curseur :

DECLARE

CURSOR c IS SELECT matr, nom, sal FROM emp ; employe c%ROWTYPE ;

BEGIN open c ;

fetch c into employe ;

IF employe.sal IS NOT NULL THEN ...

END ;

31 Le Langage PL/SQL Commandes Les curseurs Les exceptions Proc´edures et fonctions Triggers

Boucle FOR pour un curseur

Elle simplifie la programmation car elle ´evite d’utiliser explicitement les instruction OPEN, FETCH, CLOSE. En plus elle d´eclare implicitement une variable de type ROW associ´ee au curseur.

32 Le Langage PL/SQL Commandes Les curseurs Les exceptions Proc´edures et fonctions Triggers

Boucle FOR pour un curseur

DECLARE

nom varchar2(30) ;

CURSOR c nom clients IS SELECT nom,adresse FROM clients ;

BEGIN

FOR le client IN c nom clients LOOP

dbms output.put line(’Employ´e : ’ ||

UPPER(le client.nom) ||’ Ville : ’|| le client.adresse) ;

END LOOP ; END ;

Pr´efixer le nom d’un curseur par c pour ´eviter les confusions de nommage.

33 Le Langage PL/SQL Commandes Les curseurs Les exceptions Proc´edures et fonctions Triggers

Curseurs param´

etr´

es

Un curseur param´etr´e peut servir plusieurs fois avec des valeurs des param`etres diff´erentes.

On doit fermer le curseur entre chaque utilisation de param`etres diff´erents (sauf si on utilisefor qui ferme automatiquement le curseur).

34 Le Langage PL/SQL Commandes Les curseurs Les exceptions Proc´edures et fonctions Triggers

Exemple

DECLARE

-- D´eclaration du param`etre du curseur.

CURSOR c(p dept integer) IS select dept, nome from emp where dept = p dept ;

BEGIN

-- Instantiation du param`etre avec le dept 10.

FOR employe in c(10) LOOP

dbms output.put line(employe.nome) ; END LOOP ;

-- Instantiation du param`etre avec le dept 20.

FOR employe in c(20) LOOP

dbms output.put line(employe.nome) ; END LOOP ;

END ;

35 Le Langage PL/SQL Commandes Les curseurs Les exceptions Proc´edures et fonctions Triggers

(5)

Les Exceptions

Une exception est une erreur qui survient durant une ex´ecution.

2 types d’exception : pr´ed´efinie par Oracle, d´efinie par le programmeur. Saisir une exception :

Une exception ne provoque pas n´ecessairement l’arrˆet du programme si elle est saisie par un bloc (dans la partie

EXCEPTION).

Une exception non saisie remonte dans la proc´edure appelante (o`u elle peut ˆetre saisie).

37 Le Langage PL/SQL Commandes Les curseurs Les exceptions Proc´edures et fonctions Triggers

Exceptions Pr´

ed´

efinies

NO DATA FOUND

Quand Select into ne retourne aucune ligne.

TOO MANY ROWS

Quand Select into retourne plusieurs lignes.

VALUE ERROR

Erreur num´erique.

ZERO DIVIDE

Division par z´ero.

OTHERS

Toutes erreurs non intercept´ees.

38 Le Langage PL/SQL Commandes Les curseurs Les exceptions Proc´edures et fonctions Triggers

Traitement des exceptions

BEGIN ... EXCEPTION

WHEN NO DATA FOUND THEN ...

WHEN TOO MANY ROWS THEN ...

WHEN OTHERS THEN --optionnel ...

END ;

39 Le Langage PL/SQL Commandes Les curseurs Les exceptions Proc´edures et fonctions Triggers

Exceptions Utilisateur

Elles doivent ˆetre d´eclar´ees avec le type EXCEPTION. On les l`eve avec l’instruction RAISE.

DECLARE

salaire numeric(8,2) ; salaire trop bas EXCEPTION ; BEGIN

select sal into salaire from emp where matr = 50 ; IF salaire < 300 THEN

RAISE salaire trop bas ; END IF ;

EXCEPTION

WHEN salaire trop bas THEN

dbms output.put line(‘Salaire trop bas’) ; WHEN OTHERS THEN

dbms output.put line(SQLERRM) ; END ;

40 Le Langage PL/SQL Commandes Les curseurs Les exceptions Proc´edures et fonctions Triggers

Bloc anonyme ou nomm´

e

Un bloc anonyme PL/SQL est un blocDECLARE

–BEGIN –END comme dans les exemples pr´ec´edents.

On peut ex´ecuter directement un bloc PL/SQL anonyme en

tapant sa d´efinition.

Le plus souvent, on passe plutˆot une proc´edure ou une

fonction nomm´ee pour r´eutiliser le code.

42 Le Langage PL/SQL Commandes Les curseurs Les exceptions Proc´edures et fonctions Triggers

Proc´

edures sans param`

etre

CREATE OR REPLACE PROCEDURE list nom clients IS

BEGIN DECLARE

nom varchar2(30) ;

CURSOR c nom clients IS select nom,adresse from clients ;

BEGIN

FOR le client IN c nom clients LOOP

dbms output.put line(’Employ´e : ’ ||

UPPER(le client.nom) ||’ Ville : ‘|| le client.adresse) ;

END LOOP ; END ; END ;

SET SERVEROUTPUT ON ; CALL list nom clients() ;

43 Le Langage PL/SQL Commandes Les curseurs Les exceptions Proc´edures et fonctions Triggers

Proc´

edures avec param`

etres

create or replace procedure list nom clients

(ville IN varchar2, result OUT number) IS

BEGIN DECLARE

CURSOR c nb clients IS select count(*) from clients where adresse=ville ;

BEGIN

open c nb clients ; fetch c nb clients INTO result ;

close c nb clients ; END ;

END ;

IN : en lecture seule OUT : en ´ecriture seule IN OUT : en lecture/´ecriture

44 Le Langage PL/SQL Commandes Les curseurs Les exceptions Proc´edures et fonctions Triggers

Un peu plus ...

D´eclarer une variable : variable nb number ; Ex´ecuter la fonction :

execute list nom clients(’paris’, :nb) ; (Une variable

globale s’utilise avec le pr´efixe :) Visualisation du r´esultat : print ;

Description des param`etres : desc nom procedure

45 Le Langage PL/SQL Commandes Les curseurs Les exceptions Proc´edures et fonctions Triggers

(6)

Fonctions sans param`

etre

CREATE OR REPLACE FUNCTION nombre clients

-- D´eclaration du type de retour de la fonction

RETURN NUMBER IS

BEGIN DECLARE

i NUMBER ;

CURSOR get nb clients IS select count(*) from clients ;

BEGIN

open get nb clients ; fetch get nb clients INTO i ; return i ;

END ; END ;

Ex´ecution :

select nombre clients() from dual ;

46 Le Langage PL/SQL Commandes Les curseurs Les exceptions Proc´edures et fonctions Triggers

Fonctions avec param`

etres

Seuls les param`etres IN (en lecture seule) sont autoris´es pour les fonctions.

create or replace function euro to fr(somme IN number)

return number IS

taux constant number := 6.55957 ;

BEGIN return somme * taux ;

END ; /

show errors ; -- appel :

select euro to fr(10) from dual ;

47 Le Langage PL/SQL Commandes Les curseurs Les exceptions Proc´edures et fonctions Triggers

Proc´

edures et Fonctions

Suppression de proc´edures ou fonctions : DROP PROCEDURE nom procedure DROP FUNCTION nom fonction

Table syst`eme contenant les proc´edures et fonctions : user source ;

Les proc´edures et fonctions peuvent ˆetre utilis´ees dans d’autres

proc´edures ou fonctions ou dans des blocs PL/SQL anonymes.

Les fonctions peuvent aussi ˆetre utilis´ees dans les requˆetes SQL.

48 Le Langage PL/SQL Commandes Les curseurs Les exceptions Proc´edures et fonctions Triggers

Les d´

eclencheurs (triggers)

Les contraintes pr´ed´efinies ne sont pas toujours suffisantes. Ex. : tout nouveau prix d’un produit doit avoir une date de d´ebut sup´erieure `a celle des autres prix pour ce produit (pas de prix antidat´es).

Automatiser des actions lors de certains ´ev´enements du type : AFTER ou BEFORE et INSERT, DELETE ou UPDATE Syntaxe :

CREATE OR REPLACE TRIGGER nom trigger

Ev´enement [OF liste colonne] ON nom table

WHEN (condition) [FOR EACH ROW] Instructions PL/SQL ou SQL

50 Le Langage PL/SQL Commandes Les curseurs Les exceptions Proc´edures et fonctions Triggers

Acc`

es aux valeurs modifi´

ees

Utilisation de new et old.

Si nous ajoutons un client dont le nom est toto alors nous r´ecup´erons ce nom grˆace `a la variable :new.nom.

Dansle cas de suppression ou modification, les anciennes valeurs sont dans la variable :old.nom.

51 Le Langage PL/SQL Commandes Les curseurs Les exceptions Proc´edures et fonctions Triggers

Exemple

Archiver le nom de l’utilisateur, la date et l’action effectu´ee (toutes les informations) dans une table LOG CLIENTS lors de l’ajout d’un clients dans la table CLIENTS.

Cr´eer la table LOG CLIENTS avec la mˆeme structure que

CLIENTS.

Ajouter 3 colonnes USERNAME, DATEMODIF, TYPEMODIF.

create or replace trigger logadd after insert on clients

for each row BEGIN

insert into log clients values

( :new.nom, :new.adresse, :new.reference, :new.nom piece, :new.quantite, :new.prix, :new.echeance, USER,SYSDATE,’INSERT’) ;

END ;

52 Le Langage PL/SQL Commandes Les curseurs Les exceptions Proc´edures et fonctions Triggers

Pr´

edicats Conditionnels

Lorsqu’un trigger a plusieurs op´erations d´eclenchantes (ON INSERT OR DELETE OR UPDATE OF EMP), le corps du trigger peut avoir des pr´edicats conditionnels :

IF INSERTING THEN ... END IF ; IF UPDATING THEN ... END IF ;

On peut pr´eciser les colonnes soumises aux op´erations d´eclenchantes :

CREATE TRIGGER ...

... UPDATE OF sal, commission ON EMP ... BEGIN ... IF UPDATING(’SAL’) THEN ... END IF END ; 53 Le Langage PL/SQL Commandes Les curseurs Les exceptions Proc´edures et fonctions Triggers

Les commandes de d´efinition de donn´ees (LDD) et les commandes de contrˆole de transactions ne sont pas permises dans le corps d’un trigger. Ainsi, les commandes ROLLBACK, COMMIT, ..., ne doivent pas ˆetre utilis´ees dans le corps d’un trigger.

54 Le Langage PL/SQL Commandes Les curseurs Les exceptions Proc´edures et fonctions Triggers

(7)

Tables Mutantes et Tables Contraignantes

Une table mutante est une table en cours de modification par

une op´eration d´eclenchante (UPDATE, DELETE,

INSERTION) ou l’effet de DELETE CASCADE provenant de cette op´eration.

Une table contraignante est une table qu’une op´eration

d´eclenchante doit lire, soit directement via une commande

SQL (UPDATE SET ... WHERE) ou indirectement pour une contrainte d’int´egrit´e r´ef´erentielle.

Les commandes SQL dans le corps d’un trigger ne peuvent pas :

Lire (par une requˆete) ou modifier un table mutante d’une op´eration d´eclenchante.

Changer des valuers sur les colonnes de cl´es (PRIMARY, FOREIGN, UNIQUE) d’une table contraignante.

Ces restrictions permettent d’´eviter la consultation d’une table dans un ´etat transitoire et donc incoh´erent.

55 Le Langage PL/SQL Commandes Les curseurs Les exceptions Proc´edures et fonctions Triggers

Exemple d’erreur

CREATE OR REPLACE TRIGGER emp count AFTER DELETE ON emp

FOR EACH ROW DECLARE n INTEGER ; BEGIN

SELECT COUNT(*) INTO n FROM emp ;

DBMS OUTPUT.PUT LINE(’On a ’|| n || ’employ´es dans la

base’) ;

DELETE FROM emp WHERE empno = 7499 ;

On a l’erreur suivante :

ORA-04091 : table SCOTT.EMP is mutating, trigger/function may not see it.

56 Le Langage PL/SQL Commandes Les curseurs Les exceptions Proc´edures et fonctions Triggers

Le dictionnaire de donn´ees a des vues sur les triggers : USER TRIGGERS, ALL TRIGGERS, DBA TRIGGERS. Exemple : SELECT trigger type, triggering event, table name FROM user triggers ;

57 Le Langage PL/SQL Commandes Les curseurs Les exceptions Proc´edures et fonctions Triggers

Références

Documents relatifs

Bien que les jeunes contrevenants soient susceptibles d’avoir été victimes de plusieurs types de traumas depuis leur plus jeune âge, l’intérêt de ce projet de stage porte

Pour chaque sujet (N = 64) dans chaque condition, à savoir pour chaque fricative (/ʃ/, /ʒ/) dans chaque position (initiale, finale) de chaque (non)mot (char, jarre, cache,

Les conditions sociodérnographiques d’une famille peuvent aussi influencer sur les ressources disponibles pour les aider à satisfaire leurs besoins et ceux de leur entourage, dans

Por isso, foram conduzidos levantamentos das cochonilhas e seus inimigos naturais no Espírito Santo, como parte das pesquisas para o desenvolvimento do manejo integrado de pragas

Vidéo 13, page 353 : Marlène Samoun au chant, Rachid Brahim-Djelloul au violon, Pascal. Storch à la guitare et percussions, Olivier Hutman

Ayant ainsi mis en relief la relation entre traduction et entrepreneuriat au moyen d’une étude pilote et d’une analyse critique des résultats, le moins que l’on puisse

Figure 8: Computation history of case 3 with 4 catalogs The number of explored nodes, exposed in Table 2, demonstrates that the number of optimizations during the branch and

Face à cette situation, les syndicats de courtiers locaux proposent les solutions qui leur semblent les plus justes et les plus fondamentales dans le cadre d’une