Oracle PL/SQL Εισαγωγή, ενημέρωση, διαγραφή & επιλογή σε [Παράδειγμα]
⚡ Έξυπνη Σύνοψη
Δηλώσεις SQL στο εσωτερικό Oracle Η PL/SQL χειρίζεται κάθε εργασία χειρισμού δεδομένων, επιτρέποντας σε ένα μπλοκ να εισάγει, να ενημερώνει, να διαγράφει και να επιλέγει γραμμές απευθείας. Οι εντολές INSERT, UPDATE, DELETE και SELECT INTO μετακινούν και ανακτούν δεδομένα μέσα στη βάση δεδομένων.
Συναλλαγές DML σε PL/SQL
Το DML σημαίνει Γλώσσα Χειρισμού Δεδομένων, η ομάδα των SQL εντολές που αλλάζουν τα δεδομένα που είναι αποθηκευμένα σε έναν πίνακα. Μέσα σε ένα Μπλοκ PL/SQL, αυτές οι εντολές εκτελούν την εργασία χειρισμού, ενώ η PL/SQL παρέχει την περιβάλλουσα λογική. Η DML ασχολείται με τις παρακάτω λειτουργίες.
- Εισαγωγή δεδομένων
- Ενημέρωση δεδομένων
- Διαγραφή δεδομένων
- Επιλογή Δεδομένων
Στην PL/SQL, ο χειρισμός δεδομένων εκτελείται μόνο μέσω εντολών SQL.
Εισαγωγή δεδομένων
Στην PL/SQL, οι γραμμές προστίθενται σε έναν πίνακα με την εντολή SQL INSERT INTO. Αυτή η εντολή λαμβάνει ως δεδομένα εισόδου το όνομα του πίνακα, τις στήλες-στόχους και τις τιμές των στηλών και, στη συνέχεια, εισάγει την τιμή στον βασικό πίνακα.
Η εντολή INSERT μπορεί επίσης να λάβει τις τιμές απευθείας από έναν άλλο πίνακα χρησιμοποιώντας μια εντολή SELECT αντί να δώσει τις τιμές για κάθε στήλη. Μέσω μιας εντολής SELECT, μπορούν να εισαχθούν ταυτόχρονα όσες γραμμές περιέχει ο πίνακας προέλευσης.
Σύνταξη:
BEGIN INSERT INTO <table_name>(<column1>,<column2>,...,<column_n>) VALUES(<value1>,<value2>,...,<value_n>); END;
Η παραπάνω σύνταξη δείχνει την εντολή INSERT INTO. Το όνομα και οι τιμές του πίνακα είναι υποχρεωτικά πεδία, ενώ τα ονόματα των στηλών είναι προαιρετικά όταν η πρόταση INSERT παρέχει τιμές για κάθε στήλη του πίνακα. Η λέξη-κλειδί VALUES είναι υποχρεωτική όταν οι τιμές δίνονται ξεχωριστά, όπως φαίνεται παραπάνω.
Σύνταξη:
BEGIN INSERT INTO <table_name>(<column1>,<column2>,...,<column_n>) SELECT <column1>,<column2>,...,<column_n> FROM <table_name2>; END;
Αυτή η δεύτερη μορφή της INSERT INTO παίρνει τις τιμές απευθείας από χρησιμοποιώντας την εντολή SELECT. Η λέξη-κλειδί VALUES δεν πρέπει να υπάρχει εδώ, επειδή οι τιμές δεν παρέχονται ξεχωριστά.
Ενημέρωση δεδομένων
Ενημέρωση δεδομένων σημαίνει αλλαγή της τιμής μιας στήλης σε μια υπάρχουσα γραμμή. Αυτό γίνεται με την εντολή UPDATE, η οποία λαμβάνει ως δεδομένα εισόδου το όνομα του πίνακα, το όνομα της στήλης και τη νέα τιμή και ενημερώνει τα δεδομένα.
Σύνταξη:
BEGIN UPDATE <table_name> SET <column1>=<value1>,<column2>=<value2>,<column_n>=<value_n> WHERE <condition that uniquely identifies the record that needs to be updated>; END;
Η παραπάνω σύνταξη δείχνει την πρόταση UPDATE. Η λέξη-κλειδί SET δίνει εντολή στη μηχανή PL/SQL να ενημερώσει τη στήλη με την τιμή που δόθηκε. Η ρήτρα WHERE είναι προαιρετική. Εάν δεν δοθεί, η τιμή της αναφερόμενης στήλης ενημερώνεται σε ολόκληρο τον πίνακα.
Διαγραφή δεδομένων
Η διαγραφή δεδομένων σημαίνει την αφαίρεση μιας πλήρους εγγραφής από τον πίνακα της βάσης δεδομένων. Για τον σκοπό αυτό χρησιμοποιείται η εντολή DELETE.
Σύνταξη:
BEGIN DELETE FROM <table_name> WHERE <condition that uniquely identifies the record that needs to be deleted>; END;
Η παραπάνω σύνταξη δείχνει την εντολή DELETE. Η λέξη-κλειδί FROM είναι προαιρετική και με ή χωρίς τον όρο FROM η εντολή συμπεριφέρεται με τον ίδιο τρόπο. Ο όρος WHERE είναι προαιρετικός. Εάν δεν δοθεί, τότε ολόκληρος ο πίνακας θα αδειάσει.
Επιλογή Δεδομένων
Η προβολή ή ανάκτηση δεδομένων σημαίνει ανάκτηση των απαιτούμενων δεδομένων από τον πίνακα της βάσης δεδομένων. Αυτό επιτυγχάνεται με την εντολή SELECT σε συνδυασμό με τον όρο INTO. Η εντολή SELECT ανακτά τις τιμές από τη βάση δεδομένων και ο όρος INTO αντιστοιχίζει αυτές τις τιμές στις τοπικές μεταβλητές του μπλοκ PL/SQL.
Τα παρακάτω σημεία πρέπει να ληφθούν υπόψη κατά τη χρήση μιας εντολής SELECT με INTO:
- Μια πρόταση SELECT θα πρέπει να επιστρέφει μόνο μία εγγραφή κατά τη χρήση της ρήτρας INTO, επειδή μία μεταβλητή μπορεί να περιέχει μόνο μία τιμή. Εάν η εντολή SELECT επιστρέψει περισσότερες από μία γραμμές, η TOO_MANY_ROWS εξαίρεση αυξάνεται.
- Η πρόταση SELECT αντιστοιχίζει την τιμή στη μεταβλητή στον όρο INTO, επομένως χρειάζεται τουλάχιστον μία εγγραφή για να συμπληρώσει την τιμή. Εάν δεν βρει καμία εγγραφή, ενεργοποιείται η εξαίρεση NO_DATA_FOUND.
- Ο αριθμός των στηλών και οι τύποι δεδομένων τους στον όρο SELECT θα πρέπει να ταιριάζουν με τον αριθμό των μεταβλητών και τους τύπους δεδομένων τους στον όρο INTO.
- Οι τιμές ανακτώνται και συμπληρώνονται με την ίδια σειρά που αναφέρεται στη δήλωση.
- Η ρήτρα WHERE είναι προαιρετική και σας επιτρέπει να θέσετε περισσότερους περιορισμούς στις εγγραφές που ανακτώνται.
- Μια εντολή SELECT μπορεί να χρησιμοποιηθεί στη συνθήκη WHERE άλλων εντολών DML για να ορίσει τις τιμές των συνθηκών.
- Μια πρόταση SELECT που χρησιμοποιείται μέσα σε προτάσεις INSERT, UPDATE ή DELETE δεν θα πρέπει να έχει όρο INTO, καθώς σε αυτές τις περιπτώσεις δεν συμπληρώνει καμία μεταβλητή.
Σύνταξη:
BEGIN SELECT <column1>,...,<column_n> INTO <variable1>,...,<variable_n> FROM <table_name> WHERE <condition to fetch the required records>; END;
Η παραπάνω σύνταξη δείχνει την εντολή SELECT-INTO. Η λέξη-κλειδί FROM είναι υποχρεωτική και προσδιορίζει τον πίνακα από τον οποίο πρέπει να ανακτηθούν τα δεδομένα. Η ρήτρα WHERE είναι προαιρετική. Εάν δεν δοθεί, τότε θα ανακτηθούν δεδομένα από ολόκληρο τον πίνακα.
Παράδειγμα 1: Σε αυτό το παράδειγμα, θα δούμε πώς να εκτελούμε λειτουργίες DML σε PL/SQL. Θα εισαγάγουμε τις τέσσερις εγγραφές παρακάτω στον πίνακα emp.
| EMP_NAME | EMP_NO | ΜΙΣΘΟΣ | ΔΙΕΥΘΥΝΤΗΣ |
|---|---|---|---|
| BBB | 1000 | 25000 | AAA |
| XXX | 1001 | 10000 | BBB |
| Εεε | 1002 | 10000 | BBB |
| Zzz | 1003 | 7500 | BBB |
Στη συνέχεια, θα ενημερώσουμε τον μισθό του 'XXX' σε 15000, θα διαγράψουμε την εγγραφή του υπαλλήλου 'ZZZ' και τέλος θα προβάλουμε τα στοιχεία του υπαλλήλου 'XXX'.
Το παρακάτω στιγμιότυπο οθόνης δείχνει το πλήρες μπλοκ PL/SQL που χρησιμοποιήθηκε για αυτό το παράδειγμα.
DECLARE l_emp_name VARCHAR2(250); l_emp_no NUMBER; l_salary NUMBER; l_manager VARCHAR2(250); BEGIN INSERT INTO emp(emp_name,emp_no,salary,manager) VALUES('BBB',1000,25000,'AAA'); INSERT INTO emp(emp_name,emp_no,salary,manager) VALUES('XXX',1001,10000,'BBB'); INSERT INTO emp(emp_name,emp_no,salary,manager) VALUES('YYY',1002,10000,'BBB'); INSERT INTO emp(emp_name,emp_no,salary,manager) VALUES('ZZZ',1003,7500,'BBB'); COMMIT; Dbms_output.put_line('Values Inserted'); UPDATE EMP SET salary=15000 WHERE emp_name='XXX'; COMMIT; Dbms_output.put_line('Values Updated'); DELETE emp WHERE emp_name='ZZZ'; COMMIT; Dbms_output.put_line('Values Deleted'); SELECT emp_name,emp_no,salary,manager INTO l_emp_name,l_emp_no,l_salary,l_manager FROM emp WHERE emp_name='XXX'; Dbms_output.put_line('Employee Detail'); Dbms_output.put_line('Employee Name:'||l_emp_name); Dbms_output.put_line('Employee Number:'||l_emp_no); Dbms_output.put_line('Employee Salary:'||l_salary); Dbms_output.put_line('Employee Manager Name:'||l_manager); END; /
Παραγωγή:
Values Inserted Values Updated Values Deleted Employee Detail Employee Name:XXX Employee Number:1001 Employee Salary:15000 Employee Manager Name:BBB
Code Επεξήγηση:
- Code γραμμή 2-5: Δήλωση των μεταβλητών.
- Code γραμμή 7-14: Εισαγωγή των εγγραφών στον πίνακα emp.
- Code γραμμή 15: Εκτέλεση των συναλλαγών εισαγωγής.
- Code γραμμή 17-19: Ενημέρωση του μισθού του υπαλλήλου 'XXX' σε 15000.
- Code γραμμή 20: Ολοκλήρωση της συναλλαγής ενημέρωσης.
- Code γραμμή 22: Διαγραφή της εγγραφής του 'ZZZ'.
- Code γραμμή 23: Ολοκλήρωση της συναλλαγής διαγραφής.
- Code γραμμή 25: Επιλογή της εγγραφής 'XXX' και συμπλήρωση των μεταβλητών l_emp_name, l_emp_no, l_salary και l_manager.
- Code γραμμή 26-30: Εμφάνιση των τιμών των ανακτημένων εγγραφών.


