triggers pl sql tutorial with example programs
Μάθετε τα πάντα για τους Triggers στο PL SQL, τους τύπους, τη χρήση και τα πλεονεκτήματά τους:
Στο Συναλλαγές PL SQL φροντιστήριο του Σειρά PL / SQL , έχουμε μάθει για τις δηλώσεις COMMIT, ROLLBACK και SAVEPOINTS.
Σε αυτό το άρθρο, θα διερευνήσουμε τους κανόνες ενεργοποίησης στο PL SQL και τα πλεονεκτήματα, τους τύπους και τη χρήση τους. Θα συζητήσουμε πώς να δημιουργήσετε, να ενεργοποιήσετε, να ενεργοποιήσετε και να απενεργοποιήσετε τους PL / SQL Triggers με τη βοήθεια παραδειγμάτων προγραμμάτων.
Ας ξεκινήσουμε με τη συζήτηση !!
Τι θα μάθετε:
Ενεργοποιήσεις στο PL / SQL
Ένα αποθηκευμένο πρόγραμμα που ενεργοποιείται από προεπιλογή ή από ορισμένα συμβάντα ονομάζεται ενεργοποίηση.
Η σκανδάλη εκτελείται λόγω των ακόλουθων περιστάσεων που αναφέρονται παρακάτω:
- Με μια δήλωση DDL (Data Definition Language) όπως DROP, ALTER ή CREATE.
- Με μια δήλωση DML (Data Manipulation Language) όπως ΕΝΗΜΕΡΩΣΗ, ΕΙΣΑΓΩΓΗ ή ΔΙΑΓΡΑΦΗ.
- Με μια ενέργεια βάσης δεδομένων όπως SHUTDOWN, STARTUP, LOGOFF και LOGON.
Ένας κανόνας ετικέτας μπορεί να οριστεί σε σχήμα, προβολή ή βάση δεδομένων με συνημμένο συμβάν.
Πλεονεκτήματα των ενεργοποιητών
Παρατίθενται παρακάτω:
- Ικανότητα επιβολής ακεραιότητας αναφοράς.
- Ικανότητα παρακολούθησης.
- Δυνατότητα καταγραφής και κράτησης δεδομένων κατά την πρόσβαση σε πίνακες.
- Δυνατότητα διακοπής συναλλαγών που δεν είναι έγκυρες.
- Δυνατότητα επιβολής λειτουργιών ασφαλείας.
- Δυνατότητα παραγωγής παραγόμενων τιμών στηλών από προεπιλογή.
Χρήσεις σκανδαλιστών
Παρατίθενται παρακάτω:
- Αποτρέπει τις ακατάλληλες συναλλαγές.
- Συγκεντρώνει πληροφορίες σχετικά με τη χρήση του πίνακα.
- Παρακολούθηση κρίσιμων πληροφοριών.
Τύποι σκανδάλης σε PL / SQL
Οι ενεργοποιητές μπορούν να κατηγοριοποιηθούν βάσει παραμέτρων. Οι τύποι σκανδάλης παρατίθενται παρακάτω:
# 1) Κατηγοριοποίηση σε επίπεδο σκανδάλης.
- Σκανδάλη επιπέδου ROW: Εκτελείται για κάθε εγγραφή που ενημερώθηκε από μια δήλωση DML.
- STATEMENT Επίπεδο ενεργοποίησης: Εκτελείται μόνο μία φορά από τη δήλωση συμβάντος.
# 2) Κατηγοριοποίηση στο χρονισμό ενεργοποίησης.
- ΠΡΙΝ ενεργοποίηση: Εκτελείται πριν από το συγκεκριμένο συμβάν που έλαβε χώρα.
- ΜΕΤΑ την ενεργοποίηση: Εκτελείται μετά το συγκεκριμένο συμβάν που έλαβε χώρα.
- ΠΡΟΣ ΑΠΟ ΤΟ σκανδάλη: Είναι ένας ειδικός τύπος σκανδάλης και εκτελείται για κάθε εγγραφή που ενημερώθηκε από μια δήλωση DML.
# 3) Κατηγοριοποίηση του συμβάντος ενεργοποίησης.
- Ενεργοποίηση DML: Εκτελείται εάν πραγματοποιηθεί ένα συμβάν DML όπως ΕΝΗΜΕΡΩΣΗ, ΕΙΣΑΓΩΓΗ ή ΔΙΑΓΡΑΦΗ.
- Ενεργοποίηση DDL: Εκτελείται εάν πραγματοποιηθεί ένα συμβάν DDL όπως DROP, ALTER ή CREATE.
- Σκανδάλη DATABASE: Εκτελείται εάν έχει πραγματοποιηθεί ένα συμβάν βάσης δεδομένων όπως SHUTDOWN, STARTUP, LOGOFF και LOGON.
Δημιουργήστε κανόνες ετικέτας
Σύνταξη για τη δημιουργία ενός κανόνα ετικέτας:
CREATE (OR REPLACE ) TRIGGER trigger_n BEFORE DELETE (OF column_n) ON table_n (REFERENCING OLD AS o NEW AS n) (FOR EACH ROW) WHEN (condition) DECLARE <> BEGIN < > EXCEPTION <> END;
Εδώ,
- ΔΗΜΙΟΥΡΓΙΑ (Ή ΑΝΤΙΚΑΤΑΣΤΑΣΗ) TRIGGER trigger_n - Αυτό προορίζεται για τη δημιουργία, την αντικατάσταση ή την ενημέρωση ενός κανόνα ετικέτας με όνομα ως trigger_n.
- ΜΕΤΑ - Αυτό είναι για τον προσδιορισμό του χρόνου ενεργοποίησης της σκανδάλης. Το INSTEAD OF είναι για τη δημιουργία μιας σκανδάλης που έχει προβολή.
- ΔΙΑΓΡΑΦΗ - Αυτό προορίζεται για την εκτέλεση των ενεργειών DML.
- (OF στήλη_n) - Αυτό προορίζεται για την αναφορά του ονόματος της στήλης που θα τροποποιηθεί.
- (ON table_n) - Αυτό είναι για την αναφορά του ονόματος του πίνακα που είναι προσαρτημένο στη σκανδάλη.
- (ΑΝΑΦΟΡΑ ΠΑΛΙΑ Ω ΝΕΟ ΩΝ) - Αυτό γίνεται για αναφορά στις παλιές και νέες τιμές από τη δήλωση DML όπως ΕΝΗΜΕΡΩΣΗ, ΕΙΣΑΓΩΓΗ ή ΔΙΑΓΡΑΦΗ.
- (ΓΙΑ ΚΑΘΕ ΣΕΙΡΑ) - Αυτό καθορίζει μια σκανδάλη σε επίπεδο σειράς, δηλαδή, η σκανδάλη θα ενεργοποιηθεί για κάθε σειρά που έχει τροποποιηθεί, αλλιώς η σκανδάλη θα ενεργοποιηθεί μόνο μία φορά όταν εκτελείται η δήλωση SQL, η οποία είναι γνωστή ως σκανδάλη επιπέδου πίνακα.
- ΠΟΤΕ (κατάσταση) - Αυτό δίνει μια συνθήκη για σειρές για τις οποίες θα εκτελεστεί η σκανδάλη. Αυτό ισχύει μόνο για ενεργοποιητές επιπέδου γραμμής.
Ας εξετάσουμε ξανά έναν πίνακα που ονομάζεται ΜΑΘΗΤΗΣ ΣΧΟΛΕΙΟΥ .
Ας δημιουργήσουμε τώρα ένα trigger επιπέδου γραμμής για τον πίνακα STUDENT που θα εκτελεστεί από τη δήλωση DML όπως ΕΝΗΜΕΡΩΣΗ, ΕΙΣΑΓΩΓΗ ή ΔΙΑΓΡΑΦΗ σε αυτόν τον πίνακα. Ο κανόνας θα υπολογίσει και θα δείξει τη διαφορά ηλικίας μεταξύ των τρεχουσών και των προηγούμενων τιμών.
Εφαρμογή κώδικα για δημιουργία σκανδάλης:
CREATE OR REPLACE TRIGGER age_changes BEFORE DELETE OR INSERT OR UPDATE ON student FOR EACH ROW WHEN (NEW.CODE > 0) DECLARE age_diff number; BEGIN age_diff := :NEW.age - :OLD.age; dbms_output.put_line ('Prevoius age: ' || : OLD.age); dbms_output.put_line ('Current age: ' || : NEW.age); dbms_output.put_line ('Age difference: ' || age_diff); END; /
Παραγωγή του παραπάνω κώδικα:
Ο παραπάνω κώδικας έχει μερικά σημαντικά χαρακτηριστικά. Παρατίθενται παρακάτω:
- Για ενεργοποίηση επιπέδου πίνακα, οι παλιές και ΝΕΕΣ διευθύνσεις δεν είναι διαθέσιμες. Μπορούμε να χρησιμοποιήσουμε αυτές τις αναφορές για ενεργοποιήσεις επιπέδου εγγραφής.
- Εάν θέλουμε να εφαρμόσουμε ένα άλλο ερώτημα στον ίδιο κανόνα, τότε πρέπει να χρησιμοποιήσουμε τη λέξη-κλειδί ΜΕΤΑ ως σκανδάλη που μπορεί να τροποποιήσει ξανά έναν πίνακα μόνο αφού εφαρμοστούν σωστά οι προηγούμενες τροποποιήσεις.
- Η σκανδάλη που συζητήθηκε παραπάνω εκτελείται πριν από οποιαδήποτε ενέργεια DELETE, UPDATE ή INSERT στον πίνακα. Ωστόσο, μπορούμε επίσης να σχεδιάσουμε μια σκανδάλη που ενεργοποιείται και σε μία λειτουργία ( για παράδειγμα, ΜΕΤΑ ΕΙΣΑΓΩΓΗ που θα εκτελεί τη σκανδάλη κάθε φορά που εισάγεται μια εγγραφή με τη βοήθεια της λειτουργίας INSERT στο τραπέζι).
Ενεργοποίηση σκανδάλης σε PL SQL
Για να ενεργοποιήσουμε την παραπάνω σκανδάλη, πρέπει να κάνουμε οποιαδήποτε λειτουργία DML όπως DELETE, INSERT ή UPDATE στον πίνακα. Ας εισαγάγουμε ξανά μερικές τιμές στον πίνακα μαθητή με τη βοήθεια του παρακάτω ερωτήματος:
INSERT INTO STUDENT VALUES (4, 'MARY', 16, 97);
Μόλις ολοκληρωθεί η λειτουργία INSERT στον πίνακα Student, η σκανδάλη αλλαγές ηλικίας εκτελείται.
Η έξοδος του κωδικού ερωτήματος:
Δεδομένου ότι δημιουργήθηκε μια νέα εγγραφή και η προηγούμενη ηλικία δεν είναι διαθέσιμη, η προηγούμενη ηλικία και Διαφορα ΗΛΙΚΙΑΣ Ο υπολογισμός έρχεται ως μηδενικός στην παραπάνω έξοδο.
Τώρα, ας μας τροποποιήστε μια εγγραφή με δήλωση ΕΝΗΜΕΡΩΣΗΣ με τη βοήθεια του παρακάτω ερωτήματος:
UPDATE student SET age = age + 1 WHERE code = 7;
Μόλις ολοκληρωθεί η λειτουργία ΕΝΗΜΕΡΩΣΗ στον πίνακα μαθητή, η σκανδάλη αλλαγές ηλικίας εκτελείται.
Η έξοδος του παραπάνω ερωτήματος:
ΝΕΑ και ΠΑΛΙΑ ρήτρα
Χρησιμοποιείται μια νέα ρήτρα για την αποθήκευση της νέας τιμής για τις στήλες του πίνακα για την εκτέλεση της σκανδάλης. Χρησιμοποιείται σε σκανδάλη επιπέδου εγγραφής. Χρησιμοποιείται μια παλιά ρήτρα για την αποθήκευση της παλιάς τιμής για τις στήλες του πίνακα για την εκτέλεση της σκανδάλης. Χρησιμοποιείται επίσης σε σκανδάλη επιπέδου εγγραφής.
Έτσι, η νέα και η παλιά ρήτρα χρησιμοποιείται για να διατηρεί και να αναφέρεται στις νέες και παλιές τιμές μέσα σε ένα σώμα ενεργοποίησης.
Σύνθετη σκανδάλη
Μια σύνθετη σκανδάλη χρησιμοποιείται για τον καθορισμό των λειτουργιών για όλα τα σημεία χρονισμού εντός του σώματος της σκανδάλης. Παρέχει τη διάταξη για συγχώνευση όλων των ενεργειών σε διαφορετικούς χρόνους εντός ενός σώματος σκανδάλης.
Τα διάφορα σημεία χρονισμού παρατίθενται παρακάτω:
- ΜΕΤΑ το επίπεδο ΔΗΛΩΣΗΣ
- ΠΡΙΝ το επίπεδο ROW
- Μετά το επίπεδο της σειράς
- ΠΡΙΝ το επίπεδο ΔΗΛΩΣΗΣ
Απενεργοποίηση και ενεργοποίηση σκανδάλης
Μπορούμε να ενεργοποιήσουμε και να απενεργοποιήσουμε μια σκανδάλη με τη βοήθεια μιας δήλωσης DDL ALTER.
Σύνταξη:
ALTER TRIGGER trigger_n (ENABLE|DISABLE);
Εδώ, trigger_n είναι το όνομα του κανόνα ετικέτας που θέλουμε να ενεργοποιήσουμε ή να απενεργοποιήσουμε.
Τώρα ας απενεργοποιήσουμε τη σκανδάλη με τη βοήθεια του παρακάτω ερωτήματος:
ALTER TRIGGER STUDENT_DETAILS DISABLE;
Η έξοδος του κωδικού ερωτήματος:
Τώρα ας ενεργοποιήσουμε τον ίδιο κανόνα ετικέτας με τη βοήθεια του παρακάτω ερωτήματος:
ALTER TRIGGER STUDENT_DETAILS ENABLE;
Η έξοδος του κωδικού ερωτήματος:
Συχνές Ερωτήσεις και Απαντήσεις
Ε # 1) Πόσοι τύποι ενεργοποιητών υπάρχουν στο PL SQL;
Απάντηση: Υπάρχουν δύο τύποι σκανδάλης στο PL / SQL. Είναι σκανδάλη σε επίπεδο γραμμής και σκανδάλη σε επίπεδο δήλωσης.
Ε # 2) Ποιος τύπος σκανδάλης χρησιμοποιεί το παλιό και το νέο προκριματικό;
πώς να αρχικοποιήσετε μια λίστα στο java
Απάντηση: Τα παλιά και νέα προκριματικά μπορούν να χρησιμοποιηθούν μόνο με ενεργοποιητές επιπέδου σειράς. Δεν είναι συμβατά με κανόνες ενεργοποίησης σε επίπεδο δήλωσης.
Q # 3) Ποια είναι η διαφορά μεταξύ του trigger new και του trigger old;
Απάντηση: Μια νέα σκανδάλη δίνει μια λίστα με νέες εκδόσεις των αντικειμένων εγγραφής. Μια παλιά σκανδάλη δίνει μια λίστα με παλιές εκδόσεις των αντικειμένων εγγραφής.
Q # 4) Τι είναι η σκανδάλη επιπέδου γραμμής στο PL SQL;
Απάντηση: Μια σκανδάλη επιπέδου γραμμής ενεργοποιείται για μια σειρά μόνο μία φορά λόγω ενός συμβάντος. Για παράδειγμα, Εάν η διαγραφή θεωρείται ως ένα συμβάν ενεργοποίησης για έναν πίνακα, μια δήλωση διαγραφής επηρεάζει δύο σειρές, τότε η σκανδάλη ενεργοποιείται δύο φορές.
Q # 5) Τι είναι η σκανδάλη; Εξηγήστε με ένα παράδειγμα.
Απάντηση: Ένα trigger είναι μια αποθηκευμένη διαδικασία που ενεργοποιείται από προεπιλογή εάν συμβεί κάποιο συμβάν στη βάση δεδομένων. Για παράδειγμα, εάν μια σειρά έχει εισαχθεί σε έναν πίνακα ή τροποποιούμε ορισμένες τιμές στον πίνακα.
Q # 6) Ποιοι είναι οι ενεργοποιητές μετά;
Απάντηση: Οι ενεργοποιητές μετά την ενεργοποίηση μετά την εκτέλεση μιας δήλωσης DML αλλά πριν από τη δέσμευση στη βάση δεδομένων. Είναι επίσης ικανό να επαναφέρει τη δράση του.
συμπέρασμα
Σε αυτό το σεμινάριο, έχουμε συζητήσει μερικές βασικές έννοιες των Triggers στο PL SQL που είναι απαραίτητες για τη χρήση τους κατά τον προγραμματισμό. Έχουμε καλύψει τα ακόλουθα θέματα που αναφέρονται παρακάτω:
- Ενεργοποιητές.
- Τύποι σκανδάλης.
- Διάφορες λειτουργίες σε σκανδάλη.
<< PREV Tutorial | ΕΠΟΜΕΝΟ Φροντιστήριο >>