IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SQL Oracle Discussion :

Désactiver la suppression et la mise à jour [10g]


Sujet :

SQL Oracle

  1. #1
    Nouveau membre du Club
    Femme Profil pro
    Analyse système
    Inscrit en
    Octobre 2012
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Analyse système
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Octobre 2012
    Messages : 35
    Points : 32
    Points
    32
    Par défaut Désactiver la suppression et la mise à jour
    Bonsoir,
    Je veux désactiver la mise à jour et la suppression dans une table sous oracle 10g express edition!
    j'ai généré un script via power amc après une modélisation dimensionnel qui réalise cela mais il ne fonctionne pas lorsque je l'ai testé

    le script est le suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    alter table FACT_VENTE
      add constraint FK_ANALYSE__REFERENCE_DIM_TEMP foreign key (ID_TEMPS)
          references DIM_TEMPS (ID_TEMPS)
          on update restrict
          on delete restrict;
    est-ce qu'il y a quelqu'un qui a une proposition pour résoudre ce problème?

    Merci.

  2. #2
    Membre averti Avatar de dariyoosh
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    236
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 236
    Points : 334
    Points
    334
    Par défaut
    Une solution possible c'est utiliser un BEFORE DELETE OR UPDATE trigger

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    SET SERVEROUTPUT ON;
    DROP TABLE constructors;
    CREATE TABLE constructors
    (
        const_id       VARCHAR2(30)    NOT NULL,
        const_name     VARCHAR2(30)    NOT NULL
    );
    ALTER TABLE constructors ADD CONSTRAINT CONSTRUCTORS_PK
        PRIMARY KEY(const_id);
     
     
    INSERT ALL
        INTO constructors(const_id, const_name) VALUES ('id-00001', 'HP')
        INTO constructors(const_id, const_name) VALUES ('id-00002', 'Cisco')
        INTO constructors(const_id, const_name) VALUES ('id-00003', 'DELL')
        INTO constructors(const_id, const_name) VALUES ('id-00004', 'IBM')
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    SQL> SELECT * FROM constructors;
    CONST_ID		       CONST_NAME
    ------------------------------ ------------------------------
    id-00001		       HP
    id-00002		       Cisco
    id-00003		       DELL
    id-00004		       IBM
     
    4 rows selected
     
    SQL>

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    CREATE OR REPLACE PACKAGE myExceptionsPkg
    AS
        UPDATE_NOT_ALLOWED  EXCEPTION;
        DELETE_NOT_ALLOWED  EXCEPTION;
    END myExceptionsPkg;
    /
    SHOW ERRORS;
     
     
    CREATE OR REPLACE TRIGGER constructors_tr
    BEFORE UPDATE OR DELETE
    ON constructors
    FOR EACH ROW
    BEGIN
        IF UPDATING
        THEN
            RAISE myExceptionsPkg.UPDATE_NOT_ALLOWED;
        END IF;
     
        IF DELETING
        THEN
            RAISE myExceptionsPkg.DELETE_NOT_ALLOWED;
        END IF;
    END;
    /
    SHOW ERRORS;
    Donc faire un test
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    BEGIN
        INSERT INTO constructors(const_id, const_name) VALUES ('id-00005', 'HP');
        DBMS_OUTPUT.PUT_LINE('Ok insert is authorized.');
    END;
    /
    SELECT * FROM constructors;
    et le résultat:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Ok insert is authorized.
     
    PL/SQL procedure successfully completed.
     
     
    CONST_ID		       CONST_NAME
    ------------------------------ ------------------------------
    id-00001		       HP
    id-00002		       Cisco
    id-00003		       DELL
    id-00004		       IBM
    id-00005		       HP
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    BEGIN
        DELETE FROM constructors WHERE const_id = 'id-00001';
     
        EXCEPTION
            WHEN myExceptionsPkg.DELETE_NOT_ALLOWED
            THEN
                DBMS_OUTPUT.PUT_LINE('DELETE is not authorized');
                RAISE;
    END;
    /
    SELECT * FROM constructors;
    Et le résultat
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    DELETE is not authorized
    BEGIN
    *
    ERROR at line 1:
    ORA-06510: PL/SQL: unhandled user-defined exception
    ORA-06512: at "TRAIN2012.CONSTRUCTORS_TR", line 9
    ORA-04088: error during execution of trigger 'TRAIN2012.CONSTRUCTORS_TR'
    ORA-06512: at line 8
     
     
     
    CONST_ID		       CONST_NAME
    ------------------------------ ------------------------------
    id-00001		       HP
    id-00002		       Cisco
    id-00003		       DELL
    id-00004		       IBM
    id-00005		       HP

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    BEGIN
        UPDATE constructors 
        SET const_name = 'Microsoft'
        WHERE const_id = 'id-00001';
     
        EXCEPTION
            WHEN myExceptionsPkg.UPDATE_NOT_ALLOWED
            THEN
                DBMS_OUTPUT.PUT_LINE('UPDATE is not authorized');
                RAISE;
    END;
    /
    SELECT * FROM constructors;
    SET SERVEROUTPUT OFF;
    Et le résultat
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    UPDATE is not authorized
    BEGIN
    *
    ERROR at line 1:
    ORA-06510: PL/SQL: unhandled user-defined exception
    ORA-06512: at "TRAIN2012.CONSTRUCTORS_TR", line 4
    ORA-04088: error during execution of trigger 'TRAIN2012.CONSTRUCTORS_TR'
    ORA-06512: at line 10
     
     
     
    CONST_ID		       CONST_NAME
    ------------------------------ ------------------------------
    id-00001		       HP
    id-00002		       Cisco
    id-00003		       DELL
    id-00004		       IBM
    id-00005		       HP
     
    SQL>

    Cordialement,
    Dariyoosh
    Cordialement,
    Dariyoosh

  3. #3
    Nouveau membre du Club
    Femme Profil pro
    Analyse système
    Inscrit en
    Octobre 2012
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Analyse système
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Octobre 2012
    Messages : 35
    Points : 32
    Points
    32
    Par défaut
    Bonjour,

    Merci pour votre réponse clair !
    je vais la tester

    Cordialement

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 13/11/2013, 12h22
  2. [VBA-E]Graphique mise à jour automatiquement qd suppression
    Par LostIN dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 16/01/2007, 16h42
  3. Réponses: 3
    Dernier message: 06/12/2006, 13h53
  4. [VBA-W] Désactivé la mise à jour des champs
    Par Mut dans le forum VBA Word
    Réponses: 4
    Dernier message: 04/12/2006, 11h04
  5. TAdoQuery et mise à jour après suppression
    Par kurkaine dans le forum C++Builder
    Réponses: 1
    Dernier message: 30/11/2005, 15h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo