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

Oracle Discussion :

[10g]Trigger pour gérer une suite de numéro dans une table


Sujet :

Oracle

  1. #1
    Membre actif Avatar de Nicodemus
    Profil pro
    Inscrit en
    avril 2004
    Messages
    242
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : avril 2004
    Messages : 242
    Points : 212
    Points
    212
    Par défaut [10g]Trigger pour gérer une suite de numéro dans une table
    Bonjour,

    Tout d'abord, désolé si mes questions parraissent bête, je suis novice.
    Voici mon problème. J'ai une table Pages reliée à une table classeur.
    Chaque page a un numéro et appartient à un classeur. Ainsi la table page possède un clé primaire : num_page, et une clé etrangère : num_classeur.

    Je dois ecrire un trigger qui s'assure que les numéros des pages sont successfis pour un même classeur (de 1 au nombre de pages du classeur).

    Apres reflexion:
    - insertion : on vérifie que la nouvelle page est supérieure à 0 et vaut le maxumum de tous les numéros de pages du classeur + 1
    - update : le nouveau numéro de page doit être supérieur ou égale à ce maximum et ensuite on effectue un décalage de toutes les pages situées apres celle updatée.
    - delete, simple décalage de toutes les pages situées apres

    Mais comment mettre ça en oeuvre en PL/SQL ?
    J'ai déjà fait ça :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    create or replace trigger "TRG_PAGE_NUM" BEFORE insert or update or delete on "PAGE"
    for each row
    begin
     
    if NOT IS_GOOD_NUM_PAGE(:NEW.ID_PAGE, :NEW.ID_CLASSEUR) then
       RAISE_APPLICATION_ERROR ( -20021, 'Le numéro de page pour ce classeur est invalide' );
    end if;
     
     
    end;
    et la fonction

    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
    create or replace function "IS_GOOD_NUM_PAGE" (id_p in NUMBER, id_c in NUMBER) return BOOLEAN is
    existing boolean;
    a number;
    cursor srv_line is
             Select ID_PAGE
             From PAGE
             where ID_CLASSEUR = ID_C
             ORDER by ID_PAGE;
     
    begin
     
     existing := true;
     
     
     open srv_line; -- Ouverture
     loop
       fetch srv_line into a; -- Lecture de la ligne
       Exit when srv_line%NOTFOUND;
     
     
     end loop;
     close srv_line; -- Fermeture
    La fonction ne fait pas grand chose pour l'instant, juste parcourir la table page pour définir toutes les pages du classeur passé en paramètre et de les classés.

    Pour le reste, je ne sais pas trop comment faire.
    Merci pour vos idées

  2. #2
    Membre actif Avatar de Nicodemus
    Profil pro
    Inscrit en
    avril 2004
    Messages
    242
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : avril 2004
    Messages : 242
    Points : 212
    Points
    212
    Par défaut

Discussions similaires

  1. Réponses: 3
    Dernier message: 27/01/2011, 10h40
  2. Réponses: 1
    Dernier message: 26/12/2010, 22h20
  3. [RegEx] comment prélever une suite de chiffres dans une chaine
    Par thor76160 dans le forum Langage
    Réponses: 2
    Dernier message: 19/03/2010, 12h29
  4. Obtenir la forme d'une suite de Caret dans une chaîne
    Par Sergejack dans le forum Interfaces Graphiques en Java
    Réponses: 1
    Dernier message: 11/10/2006, 17h15
  5. afficher une suite de nombres dans une string
    Par hysah dans le forum C++
    Réponses: 4
    Dernier message: 27/04/2006, 19h51

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