Erreur «Mutating Table»

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

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

TP Contraintes - Triggers

Bases de données avancées

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

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

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

Bases de Données Avancées PL/SQL

Devoir Data WareHouse

Intégrité des données

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

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

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

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

Gestion de base de données

Auto-évaluation Oracle: cours de base

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

Corrigés détaillés des exercices

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

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

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

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

Introduction au PL/SQL Oracle. Alexandre Meslé

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

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

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

Attaques applicatives

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

Bases de Données Réparties

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

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 et sites WEB

SQL Historique

Administration des bases de données

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

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

Olivier Mondet

OpenPaaS Le réseau social d'entreprise

//////////////////////////////////////////////////////////////////// Administration bases de données

MS SQL Express 2005 Sauvegarde des données

Exercices sur SQL server 2000

Oracle Le langage procédural PL/SQL

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

Instructions Mozilla Thunderbird Page 1

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

Historisation des données

A QUOI SERVENT LES BASES DE DONNÉES?

Gestion des utilisateurs et de leurs droits

Règlement sur le télémarketing et les centres d'appel. Call Centres Telemarketing Sales Regulation

VTP. LAN Switching and Wireless Chapitre 4

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

Bases de Données Réparties Concepts et Techniques. Matthieu Exbrayat ULP Strasbourg - Décembre 2007

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

Pratique et administration des systèmes

Quelques aspects du Relationnel-Objet du SGBD Oracle

CATALOGUE FORMATIONS DOMAINE Bases de données

Le langage procédural PL-PGSQL

THE LAW SOCIETY OF UPPER CANADA BY-LAW 19 [HANDLING OF MONEY AND OTHER PROPERTY] MOTION TO BE MOVED AT THE MEETING OF CONVOCATION ON JANUARY 24, 2002

Présentation du PL/SQL

Les déclencheurs. Version 1.0. Grégory CASANOVA

Instructions pour mettre à jour un HFFv2 v1.x.yy v2.0.00

SERVEUR DÉDIÉ DOCUMENTATION

WEB page builder and server for SCADA applications usable from a WEB navigator

Panorama des Bases de Données

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

Présentation Windows Azure Hadoop Big Data - BI

Réplication logique avec PostgreSQL 9.4

Création et Gestion des tables

BTS/CGO P10 SYSTEME INFORMATION Année

Credit Note and Debit Note Information (GST/ HST) Regulations

PROJET 1 : BASE DE DONNÉES REPARTIES

LE LANGAGE SQL2 1. INTRODUCTION

Vues: définition. Vues: avantages. Vues: inconvénients. Vues: exemple. Vues: syntaxe 08/12/2009

Ora2Pg Performances. (C) 2013 Gilles Darold

Cheque Holding Policy Disclosure (Banks) Regulations. Règlement sur la communication de la politique de retenue de chèques (banques) CONSOLIDATION

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

CREATION WEB DYNAMIQUE

Le Langage SQL version Oracle

Quick Start Guide This guide is intended to get you started with Rational ClearCase or Rational ClearCase MultiSite.

Langage SQL : créer et interroger une base

Bases de données relationnelles

How to Login to Career Page

CHAPITRE 4 POLITIQUES DE CONTRÔLES DES ACCÈS SOUS ORACLE ADMINISTRATION ET TUNING DE BASES DE DONNÉES 10/05/2015 RESPONSABLE DR K.

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

1 Modélisation d une base de données pour une société de bourse

RULE 5 - SERVICE OF DOCUMENTS RÈGLE 5 SIGNIFICATION DE DOCUMENTS. Rule 5 / Règle 5

SQL sous SqlServer OLIVIER D. DEHECQ Olivier 0

Mysql avec EasyPhp. 1 er mars 2006

Introduction aux Bases de Données 2004/2005

Contents Windows

AND / ET USER GUIDE UK HARDWIRED CONTROL PANEL UK GUIDE UTILISATEUR CENTRALE D ALARME FILAIRE F

INTEGRITE ET BD ACTIVES

Chapitre 5 : Les procédures stockées PL/SQL

Les bases de données

BASES DE DONNEES TP POSTGRESQL

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

APIs de table pour SQL Server

Chapitre 10. Architectures des systèmes de gestion de bases de données

Transcription:

TRIGGER Programmation avancée H.LUU SES Université de Genève H.Luu - Base de données - Eté 2002 Erreur «Mutating Table» Définition : Une table est en état «mutating» si elle est en train d être modifiée par une instruction UPDATE, INSERT, DELETE, ou elle a besoin d être mise à jour à cause des effets de l action DELETE CASCADE. L erreur «mutating table» sera commise si on essaye de lire ou de modifier une table en état «mutating». Cette erreur n a lieu qu avec un trigger au niveau de tuple. H.Luu - Base de données - Eté 2002 2 1

Erreur «Mutating Table» CREATE OR REPLACE TRIGGER maj_trajet BEFORE UPDATE OF villedep, villearr, nbkm ON trajet FOR EACH ROW DECLARE km trajet.nbkm%type; BEGIN SELECT nbkm INTO km FROM trajet WHERE villedep=:new.villedep AND villearr=:new.villearr; IF km <> :new.nbkm THEN RAISE_APPLICATION_ERROR(-20010, Erreur'); END IF; END; H.Luu - Base de données - Eté 2002 3 Solutions «Mutating Table» Solutions d éviter l erreur «mutating table» 1. Transformer un trigger au niveau de tuple à celui au niveau d instruction, ou 2. Utiliser une variable de table PL/SQL, ou 3. Ne pas utiliser des triggers pour implémenter cette RI, mais vérifier la dans les méthodes dont l action peut transgresser la RI. H.Luu - Base de données - Eté 2002 4 2

Corrigé «Mutating table» Utiliser trigger au niveau d instruction => ne pouvoir consulter les valeurs des lignes affectées. Chercher deux tuples (deux trajets) dont les villes de départ et d arrivé sont les mêmes mais les distances en KM sont différentes. 101 GENEVE ZURICH 180 102 GENEVE LAUSANNE 50 209 BERN GENEVE 120 101 GENEVE ZURICH 180 102 GENEVE LAUSANNE 50,,, 202 GENEVE LAUSANNE 60 H.Luu - Base de données - Eté 2002 5 Mutating Table Solution (1) CREATE OR REPLACE TRIGGER maj_sur_trajet AFTER UPDATE OF villedep, villearr, nbkm ON trajet DECLARE CURSOR cur_trajet_1 IS SELECT villedep,villearr,nbkm FROM trajet GROUP BY villedep, villearr, nbkm; CURSOR cur_trajet_2 IS SELECT villedep,villearr,nbkm FROM trajet GROUP BY villedep, villearr, nbkm; vd1 trajet.villedep%type; va1 trajet.villearr%type; nbkm1 trajet.nbkm%type; vd2 trajet.villedep%type; va2 trajet.villearr%type; nbkm2 trajet.nbkm%type; var_exit NUMBER(1) :=0; H.Luu - Base de données - Eté 2002 6 3

Mutating Table Solution (1) BEGIN OPEN cur_trajet_1; LOOP FETCH cur_trajet_1 INTO vd1, va1, nbkm1; OPEN cur_trajet_2; LOOP FETCH cur_trajet_2 INTO vd2, va2, nbkm2; IF vd1=vd2 and va1=va2 and nbkm1<>nbkm2 THEN var_exit:=1; END IF; EXIT WHEN (cur_trajet_2%notfound OR var_exit=1); CLOSE cur_trajet_2; EXIT WHEN (cur_trajet_1%notfound OR var_exit=1); CLOSE cur_trajet_1; IF var_exit=1 THEN RAISE_APPLICATION_ERROR(-20101,'Invalid update'); END IF; END; H.Luu - Base de données - Eté 2002 7 Mutating Table Solution (2) CREATE OR REPLACE TRIGGER maj_sur_trajet AFTER UPDATE OF villedep, villearr, nbkm ON trajet DECLARE TYPE rec_traj IS RECORD (villedep trajet.villedep%type, villearr trajet.villearr%type, nbkm trajet.nbkm%type); TYPE tab_trajet IS TABLE OF rec_traj INDEX BY BINARY_INTEGER; var_tab tab_trajet; rec_1 rec_traj; rec_2 rec_traj; cnt NUMBER(3); n NUMBER(3); m NUMBER(3); CURSOR cur_trajet IS SELECT villedep,villearr,nbkm FROM trajet GROUP BY villedep, villearr, nbkm; H.Luu - Base de données - Eté 2002 8 4

Mutating Table Solution (2) BEGIN /*transférer les données de la table à la collection*/ FOR rec_1 IN cur_trajet LOOP var_tab (cnt) :=rec_1; /*Vérifier la validation de la modification*/ cnt := cur_trajet%rowcount - 1; FOR n IN 0..cnt LOOP rec_1:=var_tab(n); FOR m IN n..cnt LOOP rec_ 2:=var_tab(m); IF (rec_1.villedep=rec_ 2.villedep AND rec_1.villearr=rec_2.villearr AND rec_1.nbkm<>rec_2.nbkm) THEN RAISE_APPLICATION_ERROR(-20001, MAJ non-valide'); END IF; END; H.Luu - Base de données - Eté 2002 9 Erreurs de compilation Erreurs en exécutant des instructions SQL «titre CHAR(30) CONSTRAINT fk_titre_fonds REFERENCES catalogue(titre)» : reprendre l instruction SQL fausse «Erreur à ligne 3» : la ligne où l erreur a lieu. «ORA-02253 : missing right parenthesis» : le code et message d erreur. H.Luu - Base de données - Eté 2002 10 5

Erreurs de compilation La compilation des blocs PL/SQL ou des procédures stockées dans Oracle (par ex. trigger, procédure, ) se termine par un message Si la compilation réussit : <objet> créé(e). H.Luu - Base de données - Eté 2002 11 Erreurs de compilation Si non, Attention : <objet> créé(e) avec erreurs de compilation H.Luu - Base de données - Eté 2002 12 6

Visualiser les erreurs de compilation. Commande SQL*Plus : SHOW ERRORS Line / Col : Ligne / Colonne où l erreur a lieu Ligne : à compte de BEGIN s il n y a pas de «DECLARE», S il y a de «DECLARE» à compter de «DECLARE» Colonne : à compter de la 1ère colonne Error : Code et Message d erreur H.Luu - Base de données - Eté 2002 13 Interpréter des messages d erreur Erreur numérotée commençante par «ORA» : message d erreur du serveur http://cui.unige.ch/doc/oracle8/doc/errmsg80 3/A54625_01/newch2a.htm#1920 Ex. ORA-00907: missing right parenthesis Cause: A left parenthesis has been entered without a closing right parenthesis, or extra information was contained in the parentheses. All parentheses must be entered in pairs. Action: Correct the syntax and retry the statement. H.Luu - Base de données - Eté 2002 14 7

Interpréter des messages d erreur Erreur numérotée commençante par «PLS» : message d erreur PL/SQL http://cui.unige.ch/doc/oracle8/doc/errmsg80 3/A54625_01/newch3.htm#2676 Ex. PLS-00201: identifier name must be declared Cause: An attempt was made to reference either Action: Check the spelling and declaration of the referenced name H.Luu - Base de données - Eté 2002 15 Interpréter des messages d erreur Erreur non-numérotée, référencer la syntaxe pour : Commande SQL*Plus : http://cui.unige.ch/doc/oracle8/doc/server803/a53717 _01/ch7.htm#top Instruction SQL : Oracle8 Server SQL Language Reference Manuel. http://cui.unige.ch/doc/oracle8/doc/server803/a54647 _01/ch4a.htm#3826 Bloc PL/SQL : PL/SQL User s Guide and Reference http://cui.unige.ch/doc/oracle8/doc/server803/a54654 _01/toc.htm H.Luu - Base de données - Eté 2002 16 8