Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1739 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Trigger : Besoin d'une relecture avant de pourrir ma base...

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Trigger : Besoin d'une relecture avant de pourrir ma base...

n°991575
Arjuna
Aircraft Ident.: F-MBSD
Posté le 23-02-2005 à 17:18:34  profilanswer
 

Je suis en train d'écrire un Trigger sur un base de données.
 
Et euh... En fait, je doute un peu (j'ai l'habitude de lancer ma requête bugguée, et débugguer au fur et à mesure, sauf que là ça va pas le faire).
 
Pour résumer, j'ai une table "LeaseSchedule", dans laquelle j'ai un champ "UseRights" à 0 ou 1.
J'ai une table "zUserContractPerimeter" qui permet de rattacher des droits utilisateurs à un schédule et ses fils (contracts).
 
Lorsque je décide de passer un schedule à une gestion sans droits (UseRights = 0), je veux aller supprimer tous les droits stipulés pour ce schedule, puisqu'ils sont devenus caduques.
 
Voilà le truc que j'ai pondu, en essayant d'optimiser un maximum le nombre de lignes traîtées :
 

Code :
  1. CREATE TRIGGER trgLeaseSchedule ON LeaseSchedule FOR UPDATE
  2. AS
  3. BEGIN
  4. DECLARE  @AppName  char(30)
  5. SELECT DISTINCT @AppName = program_name from master..sysprocesses WHERE hostprocess = HOST_ID()
  6. IF @AppName <> 'CLASS' AND USER_NAME() <> 'dbo' AND @@NESTLEVEL = 0
  7. BEGIN
  8.  ROLLBACK TRANSACTION CLASSTRIGGER
  9.  RAISERROR (99000,15,1)
  10.  RETURN
  11. END
  12. ELSE
  13. BEGIN
  14.  DECLARE @scheduleid int
  15.  DECLARE curSch CURSOR FOR
  16.  select leasescheduleid from inserted where userights = 0
  17.  OPEN curSch
  18.  FETCH NEXT FROM curSch INTO @scheduleid
  19.  WHILE @@FETCH_STATUS = 0
  20.  BEGIN
  21.   DELETE zUserContractPerimeter
  22.   WHERE EXISTS (
  23.    SELECT null
  24.    FROM deleted
  25.    WHERE deleted.leasescheduleid = @scheduleid
  26.    AND deleted.UseRights = 1
  27.    AND zUserContractPerimeter.scheduleid = deleted.leasescheduleid
  28.   )
  29.   FETCH NEXT FROM curSch INTO @scheduleid
  30.  END
  31.  CLOSE curSch
  32.  DEALLOCATE curSch
  33. END
  34. END


 
J'ai un léger doute sur mon delete en fait :D
 
Normalement, ce que j'ai voulu écrire (en tenant compte du curseur autour), c'est :
-> Supprime les lignes de zUserContractPerimeter où dans "deleted" (avant update de la table LeaseSchedule) je gérais des authorisations pour le schedule, et où dans inserted (après maj) je n'en gère plus.
 
Ca marche mon truc, ou si je vais vider ma base au premier essai ?
 
Je demande ça, parceque j'ai passé une partie de la journée à la remplir pour me faire des jeux de test, et ça me gonflerait de devoir tous me les re-taper :D

mood
Publicité
Posté le 23-02-2005 à 17:18:34  profilanswer
 

n°992025
Beegee
Posté le 24-02-2005 à 08:47:24  profilanswer
 

Ben tu n'as qu'à faire une autre table zUserContractPerimeter_Arjuna créée à partir de zUserContractPerimeter :
 

Code :
  1. CREATE TABLE zUserContractPerimeter_Arjuna
  2. AS SELECT * FROM zUserContractPerimeter;


 
Et faire le delete dans celle-là pour faire tes tests ...
 
Ou encore, au lieu de faire un DELETE, ajoute un champ TO_DELETE dans zUserContractPerimeter et fais un UPDATE ... comme ça tu verras si tu flag les bonnes lignes à effacer ;)

n°992038
Arjuna
Aircraft Ident.: F-MBSD
Posté le 24-02-2005 à 09:20:24  profilanswer
 

mouais, mais je suis très fénéant :D je me disais que si vous le faisiez à ma place, ça serait mieu [:ddr555]
 
finalement, j'ai lancé le truc (pas trop fort pour pas le casser), et j'ai obtenu une ou deux erreurs à la con à cause du nom du curseur déjà utilisé dans une procédure déclenchant le trigger (changé en local) et à part ça les données sont toujours là et ça fait ce que je lui demande, ça a donc l'air bon :)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Trigger : Besoin d'une relecture avant de pourrir ma base...

 

Sujets relatifs
Accès à la base de données par un utilisateurProblème selection base (débutante que je suis, aidez moi!!)
strcpy?? c flou.... besoin d'aide.. merci[Oracle] Savoir sur quelle base on se trouve
besoin d'aide pour un programmeBase de données en Ada ?
Checkbox et base données[HELP] Connexion a une base de donnees access sous VB.NET
Lire base de registrebesoin d'aide svp Python + wxPython
Plus de sujets relatifs à : Trigger : Besoin d'une relecture avant de pourrir ma base...


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR