Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

πρόβλημα με trigger

Îåêßíçóå áðü ôï ìÝëïò Anastasia_M. Τελευταία δημοσίευση από το μέλος Anastasia_M στις 05-06-2006, 12:45. Υπάρχουν 2 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  04-06-2006, 22:37 13604

    πρόβλημα με trigger

     

    Καλησπέρα,

    έχω τους πίνακες

     

    /*TABLE MOVIES */

    CREATE TABLE MOVIES(

    ID INT IDENTITY (1,1) NOT NULL PRIMARY KEY,

    TITLE VARCHAR (50) NOT NULL UNIQUE,

    STOCK TINYINT  );

     

     

     /*TABLE CUSTOMERS*/

    CREATE TABLE CUSTOMERS(

    ID INT IDENTITY (1,1) PRIMARY KEY,

    USERNAME VARCHAR(25) NOT NULL );

     

     

    /*TABLE PURCHASE*/

    CREATE TABLE PURCHASE(

    C_ID INT,

    M_ID INT,

    QUANTITY INT,

    FOREIGN KEY(M_ID) REFERENCES MOVIES(ID),

    FOREIGN KEY(C_ID) REFERENCES CUSTOMERS(ID)

    )

     

     

    Κάνω μια εργασία με θέμα πώληση dvd  και αντιμετωπίζω το παρακάτω πρόβλημα.

    Έχω λοιπόν τον πίνακα MOVIES που αφορά τις ταινίες με χαρακτηριστικά το ID που είναι το κλειδί, το TITLE που είναι το όνομα της ταινίας και το STOCk που είναι το απόθεμα στο κατάστημα.

    Τον πίνακα CUSTOMERS που αφορά τους πελάτες του καταστήματος με χαρακτηριστικά το ID το κλειδί και το username το όνομα του, ενώ υπάρχει και ο πίνακας PURCHASE που είναι η αγορά ταινίας από τον πελάτη και έχει χαρακτηριστικά το M_ID που αναφέρεται σε ποια ταινία θα αγοράσει ο πελάτης, το C_ID που δείχνει ποιος ακριβώς πελάτης θα την πάρει και το quantity που δείχνει σε τι ποσότητα.

     

    Κάνουμε τις εισαγωγές

     

    INSERT INTO CUSTOMERS VALUES('GIORGOS');

     

    INSERT INTO MOVIES VALUES ('TROY',7);

    INSERT INTO MOVIES VALUES ('TITANIC',10)΄;

     

     

    Θέλω κάθε φορά που γίνεται μια εισαγωγή στον πίνακα της αγοράς (PURCHASE)  να μειώνεται το απόθεμα(STOCK) των ταινίων μου στον πίνακα MOVIES, τόσο όσο θα έχει επιλέξει ο πελάτης(CUSTOMER) στη ποσότητα(QUANTITY). Δηλαδή θέλω να ενημερώνεται το απόθεμα κάθε ταινίας όταν αυτή αγοράζεται σε ποσότητα quantity.

    Δημιουργώ το trigger ..

     

    CREATE TRIGGER AFTER_PURSCHASE

    ON PURCHASE

    AFTER INSERT

    as

    UPDATE MOVIES

    SET STOCK=STOCK-QUANTITY

    FROM MOVIES AS M,PURCHASE AS p

    WHERE M.ID=p.M_ID

     

     

    Και κάνω εισαγωγές στο πίνακα αγορά (PURCHASE)

    INSERT INTO PURCHASE VALUES(1,1,3);

     

     

    Έχω λοιπόν ο πελάτης με κωδικό 1 αγοράζει την ταινία με κωδικό 1 σε ποσότητα 3 dvd

    Βλέπουμε ότι το απόθεμα στον πίνακα MOVIES της ταινίας με κωδικό 1 μειώθηκε κανονικά όπως θέλαμε..από 7 σε 4..

     

    Όταν κάνω την άλλη εισαγωγή

    INSERT INTO PURCHASE VALUES(1,2,2);

     

     

    Και παω να αγοράσω την ταινία με κωδικό 2 σε ποσότητα 2, το απόθεμα μειώνεται κατά 2 από 10 σε 8 όμως εξακολουθεί να μειώνεται και το απόθεμα από την πρώτη αγορά..το είδατε???μήπως μπορείτε να με βοηθήσετε??εγώ θέλω ενημέρωση μόνο στην ταινία που αγοράζεται και αυτό εξακολουθεί να μειώνει το stock της προηγούμενης αγοράς..

     

     

    Σας δίνω τους κώδικες δοκιμάστε τους. Είναι σε sql server 2005.

    Ευχαριστώ

     

     

     

     

     

  •  05-06-2006, 11:46 13630 σε απάντηση της 13604

    Απ: πρόβλημα με trigger

    O Trigger σωστά λειτουργεί απλά δεν είναι αυτό που θέλεις .Έτσι όπως είναι κάνει update όλες τις εγγραφές του πίνακα movies. Αν διαβάσεις τα BOL o inserted trigger έχει τον εικονικό πίνακα ‘inserted’ που είναι της ίδιας μορφής με το πίνακα PURCHASE στην περίπτωση σου που περιέχει τις εγγραφές που έγιναν insert.

    Δοκίμασε αυτόν τον trigger:

    CREATE TRIGGER AFTER_PURSCHASE

    ON PURCHASE

    AFTER INSERT

    as

    UPDATE MOVIES

    SET STOCK=STOCK-QUANTITY

    FROM MOVIES AS M,INSERTED AS p

    WHERE M.ID=p.M_ID


    Sex is like programing; One mistake, and you will have to support it for the rest of your life…
  •  05-06-2006, 12:45 13641 σε απάντηση της 13604

    Απ: πρόβλημα με trigger

    Καλημέρα...

    Το δοκίμασα αυτό που μου είπατε και δουλεύει μια χαρά..Σας ευχαριστώ πάρα πολύ για τη βοήθεια...:)
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems