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

PL/SQL Oracle Discussion :

Trigger à condition sous ORACLE


Sujet :

PL/SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Homme Profil pro
    géomaticien
    Inscrit en
    Septembre 2017
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : géomaticien
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2017
    Messages : 5
    Par défaut Trigger à condition sous ORACLE
    Bonjour,
    Dans une appli de gestion dont le SGBD est Oracle Locator je souhaiterai ajouter un trigger à condition:

    remplir automatiquement le champ date du prochain remplacement = date de pose + 12 ans

    Le principe ci-dessus est le suivant cependant j'obtiens une erreur.

    Voici ce que j'ai utilisé comme syntaxe

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    create trigger MONTRIGGER after update on MATABLE for each row
    begin
    if (:new.ID_REF_BANC := '1') then
    insert into DATE_PROCH_RPLT := (DATE_POSE,interval 12 year);
    end if;
    end;
    Merci à vous

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 134
    Par défaut
    Citation Envoyé par SIG_carene Voir le message
    cependant j'obtiens une erreur.
    En nous donnant le message d'erreur, ce serait plus plus facile pour t'aider à la corriger...
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 953
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 953
    Par défaut
    Utilisez un trigger BEFORE UPDATE, et remplacez :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    insert into DATE_PROCH_RPLT := (DATE_POSE,interval 12 year);
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    :DATE_PROCH_RPLT := add_months(:new.DATE_POSE, 12*12 );
    Ne faudrait-il pas aussi gérer le cas BEFORE INSERT ?

  4. #4
    Membre à l'essai
    Homme Profil pro
    géomaticien
    Inscrit en
    Septembre 2017
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : géomaticien
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2017
    Messages : 5
    Par défaut voici le message d'erreur
    voici le message d'erreur :
    ORA-04098: Déclencheur 'MONTRIGGER' non valide. Echec de la revalidation
    J'ai exécuté la commande suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SHOW ERRORS TRIGGER "MONTRIGGER" ;
    et voici le résultat:

    2/22 PLS-00103: Symbole "=" rencontré à la place d'un des symboles suivants :

    . ( ) , * @ % & = - + < / > at in is mod remainder not rem =>
    <exposant (**)> <> or != or ~= >= <= <> and or like like2
    like4 likec as between || indicator multiset member
    submultiset
    Symbole ", inséré avant "=" pour continuer.

    3/29 PLS-00103: Symbole "=" rencontré à la place d'un des symboles suivants :

    . ( @ select <identificateur>
    <identificateur entre guillemets> partition subpartition
    values

    3/52 PLS-00103: Symbole "12" rencontré à la place d'un des symboles suivants :

    . ) , * @ & = - + < / > at in is mod remainder not rem =>
    <exposant (**)> <> or != or ~= >= <= <> and or like like2
    like4 likec between || multiset member
    <une chaîne SQL entre apostrophes> submultiset
    merci

  5. #5
    Membre à l'essai
    Homme Profil pro
    géomaticien
    Inscrit en
    Septembre 2017
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : géomaticien
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2017
    Messages : 5
    Par défaut suite
    J'ai indiqué le message d'erreur au même moment que tu m'as répondu.

    je suis d'accord qu'il faut que je gère le BEFORE INSERT d'où :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    CREATE OR REPLACE TRIGGER "GEO_ESP_PUBLIC"."TRG_VOI_BANC_DV" 
    BEFORE INSERT OR UPDATE ON GEO_ESP_PUBLIC.VOI_BANC_MAJ FOR EACH ROW
    BEGIN
    if (:new.ID_REF_BANC := '1') then
    insert into :DATE_PROCH_RPLT := add_months(:new.DATE_POSE, 12*12 );
    end if;
    end;
    cependant même erreur.

    merci

  6. #6
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 216
    Par défaut
    Date_proch_rplt, c'est une autre table, dans laquelle tu veux insérer une ligne ? Forcément oui, puisque ta commande est insert into Date_Proch_rplt.

    Et dans cette autre table, il y a juste une colonne de type date, sans identifiant de produit ?

    Bizarre.

  7. #7
    Membre à l'essai
    Homme Profil pro
    géomaticien
    Inscrit en
    Septembre 2017
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : géomaticien
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2017
    Messages : 5
    Par défaut
    Non, c'est là où je bloque car c'est dans la même table

    exemple: MATABLE à renseigner est constitué des champs suivants :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ID_REF_BANC	NUMBER(10,0)	No	99 
    DATE_PROCH_RPLT	DATE	Yes	
    DATE_POSE	DATE	Yes
    et j'ai une table de nomenclature "REFERENCE" dans laquelle ID_REF est en foreign_key avec ID_REF_BANC

Discussions similaires

  1. Réponses: 0
    Dernier message: 13/06/2011, 16h30
  2. trigger sous oracle
    Par oOmanOo dans le forum PL/SQL
    Réponses: 1
    Dernier message: 23/05/2011, 09h31
  3. Trigger sous oracle ne fonctionne pas !
    Par ychaabani dans le forum PL/SQL
    Réponses: 4
    Dernier message: 08/02/2010, 10h24
  4. création de trigger sous oracle 9i
    Par bkina dans le forum PL/SQL
    Réponses: 2
    Dernier message: 12/11/2007, 13h58
  5. Trigger sous oracle
    Par arezki76 dans le forum Oracle
    Réponses: 3
    Dernier message: 31/08/2006, 12h49

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