ΚΕΝΤΡΟ ΠΛΗ.ΝΕ.Τ. Ν. ΦΛΩΡΙΝΑΣ

Η Βάση Δεδομένων Oracle

 

Μάθημα 1 - Τι Είναι η Oracle

Η Oracle ανήκει στις Σχεσιακές Βάσεις Δεδομένων ( Relational DataBases), δηλ. στηρίζεται σε σχέσεις (relations) που δηλώνονται με βάση τα κοινά πεδία διαφορετικών πινάκων (tables). Αυτές οι σχέσεις, στην ουσία τα κοινά πεδία, μπορούν να καθορισθούν πριν αλλά και μετά από την δημιουργία των αρχείων και με την βοήθειά τους μπορούμε να έχουμε ευέλικτα και εύκολα διαχειρίσιμα συστήματα πληροφόρησης.

Η Oracle διαθέτει την γλώσσα αναζήτησης ή ερωτημάτων (query language) SQL*Plus, με την βοήθεια της οποίας μπορούμε να διαχειριστούμε τις πληροφορίες μιας βάσης δεδομένων της Oracle. Με την SQL*Plus μπορούμε να δημιουργήσουμε πίνακες, εγγραφές, πεδία και σχέσεις και στην συνέχεια να κάνουμε εργασίες ανεύρεσης και ενημέρωσης (τροποποίησης) των αποθηκευμένων δεδομένων, παρέχοντας έτσι ένα δυναμικό εργαλείο διαχείρισης ενός συστήματος πληροφόρησης.

Πριν κάνουμε ο,τιδήποτε, πρέπει να έχουμε υπόψη μας ότι παίζει πολύ μεγάλο ρόλο η σωστή οργάνωση της βάσης δεδομένων και η δημιουργία των σωστών σχέσεων μεταξύ των αρχείων που την αποτελούν (DataBase design).

Αν δουλεύουμε σαν χρήστες της Oracle σ' ένα μεγάλο σύστημα, ο Διαχειριστής της Βάσης Δεδομένων, DataBase Administrator (DBA), θα πρέπει να μας παραχωρήσει ένα όνομα χρήστη (user name) της Oracle για όσο χρόνο χρησιμοποιούμε την Oracle.

 

Μάθημα 2 - Τα Μέρη της Oracle

Οπως είδαμε είδαμε, η Oracle διαθέτει σαν εργαλείο αναζήτησης και χειρισμού πληροφοριών την γλώσσα ερωτημάτων SQL*Plus, η οποία δέχεται τα εξής δύο είδη εντολών :

Για να διακόψουμε μια εκτελούμενη εντολή της Oracle πρέπει να πατήσουμε το πλήκτρο Delete, ενώ για να σταματήσουμε την λειτουργία της Oracle και να επιστρέψουμε στο λειτουργικό σύστημα πρέπει να γράψουμε Exit.

Το prompt όταν η Oracle είναι σε λειτουργία και περιμένει κάποια εντολή της SQL* από μας είναι το

SQL>

Μια εντολή της SQL* δεν τελειώνει με πάτημα του πλήκτρου Enter αλλά με τον χαρακτήρα ; και μπορούμε να έχουμε μια εντολή της SQL* σε πολλές γραμμές.

 

Μάθημα 3 - Οι Κατηγορίες Εντολών της SQL*

Οι εντολές της SQL* χωρίζονται στις εξής τρεις κατηγορίες, ανάλογα με το αντικείμενο και την λειτουργία τους :

Εντολές για Ερωτήματα (Queries)

Εντολές Αλλαγής Στοιχείων (DML)

Εντολές Δημιουργίας Αντικειμένων της Βάσης (DDL)

Εντολές Ελέγχου Ασφάλειας της Βάσης (DCL)

 

Μάθημα 4 - Δημιουργία Πίνακα (Table)

Για να δημιουργήσουμε έναν πίνακα (table), χρησιμοποιούμε την εντολή Create Table και προσδιορίζουμε το όνομα του πίνακα και μέσα σε παρενθέσεις τις στήλες (πεδία) που θα περιέχει, ως εξής :

Create Table Clients

    (ClientId char(5) not null, Name char(20), Address char(25), Phone char(15), Poso number(10, 2));

Create Table Orders

    (OrderId char(6) not null, OrderClientId char(5) not null, OrderDate date, OrderValue number);

 

Μάθημα 5 - Καταχώρηση Δεδομένων σε Πίνακα

Για να καταχωρήσουμε (εισάγουμε) στοιχεία σ' έναν πίνακα, χρησιμοποιούμε την εντολή Insert Into, γράφουμε το όνομα του πίνακα, μετά την δήλωση Values και τις τιμές που θέλουμε μέσα σε παρενθέσεις και χωρισμένες με κόμμα, ως εξής :

Insert Into Clients Values ('100', 'Αντωνιάδης Νικόλαος', 'Π. Μελά 100', '03850-22000', 100000);

Insert Into Orders Values ('200', '100', '11-09-2001', 200000);

Μάθημα 6 - Η Εντολή Select

Με την εντολή Select μπορούμε να επιλέξουμε και να εμφανίσουμε κάποια στοιχεία (γραμμές και στήλες) από έναν ή περισσότερους πίνακες μιας βάσης δεδομένων. Η εντολή χρησιμοποιεί την δήλωση From, για να ξέρει από ποιον πίνακα θα πάρει τα στοιχεία, και την δήλωση Where, για να ξέρει ποια συνθήκη θα εφαρμόσει για να απομονώσει τα στοιχεία που μας ενδιαφέρουν.

Η σύνταξη είναι η εξής :

Select πεδίο1, πεδίο2, ...

        From πίνακας1, πίνακας2, ...

                Where συνθήκη;

Ακολουθεί ένα παράδειγμα.

Select Name, Address, Phone

        From Clients

                Where Poso = 100000;

Για να μην εμφανισθούν περισσότερες από μία φορές γραμμές που έχουν τις ίδιες τιμές σ' όλα τα πεδία, χρησιμοποιούμε την δήλωση Distinct πριν από τα ονόματα των πεδίων, ως εξής :

Select Distinct Name, Address, Phone

        From Clients;

Με την εντολή Select * From Clients εμφανίζονται όλα τα πεδία του πίνακα.

 

Μάθημα 7 - Η Δήλωση Where

Με την δήλωση Where μπορούμε να ορίσουμε συνθήκες επιλογής γραμμών με βάση τις τιμές ορισμένων πεδίων ενός πίνακα. Πρώτα γράφουμε την στήλη στην οποία θα βασιστεί το ερώτημα (query), ύστερα τον τελεστή σύγκρισης και τέλος την τιμή του πεδίου με την οποία θα γίνει η σύγκριση με την τιμή της στήλης.

Οι τελεστές που μπορούμε να χρησιμοποιήσουμε είναι οι εξής :

Μπορούμε να χρησιμοποιήσουμε τον λογικό τελεστή άρνησης Not για να αντιστρέψουμε όποια συνθήκη θέλουμε και μπορούμε ακόμη να χρησιμοποιήσουμε και τους λογικούς τελεστές σύζευξης And και διάζευξης Or.

Η Oracle χρησιμοποιεί τους εξής χαρακτήρες μπαλαντέρ (wildcards) :

Ακολουθούν παραδείγματα.

Select Name, Address, Phone, Poso

        From Clients

                Where (ClientID > 100 And Poso=100000) Or Poso <50000;

Select Name, Address, Phone

        From Clients

                Where Name Like 'AN%';

 

Μάθημα 8 - Η Δήλωση Order By

Με την δήλωση Order By μπορούμε να ταξινομήσουμε τις εγγραφές που έχουμε επιλέξει με βάση την τιμή ενός πεδίου. Εξ ορισμού, η ταξινόμηση είναι αύξουσα αλλά με την δήλωση Desc μπορούμε να ορίσουμε φθίνουσα ταξινόμηση. Μπορούμε να ορίσουμε ταξινόμηση και με βάση τις τιμές περισσότερων από μία στήλες. Ακολουθεί ένα παράδειγμα.

Select Name, Address, Phone, Poso

        From Clients

                Where ClientID > 100 Order By Poso (Desc), Name;

 

Μάθημα 9 - Συνδυασμός Πινάκων

Μπορούμε να συνδυάσουμε τις γραμμές δύο πινάκων, εφόσον υπάρχουν κοινές στήλες στους δύο πίνακες. Αυτές οι στήλες μπορούν να έχουν το ίδιο όνομα ή όχι, αλλά οπωσδήποτε πρέπει να έχουν τον ίδιο τύπο δεδομένων. Η συνθήκη Where καθορίζει τον τρόπο συνδυασμού των πινάκων με βάση τις τιμές της κοινής στήλης των δύο πινάκων. Ακολουθεί ένα παράδειγμα.

Select Name, OrderId

        From Clients, Orders

                Where Clients.ClientId = Orders.OrderClientId;

Μπορούμε να χρησιμοποιήσουμε και σύντομα ονόματα ή ψευδώνυμα (aliases) για τους πίνακες, ως εξής :

Select O.*, Name, Poso

        From Clients C, Orders O

                Where C.ClientId = O.OrderClientId Order By OrderId;

 

Μάθημα 10 - Αριθμητικές Πράξεις σε Ερωτήματα

Μέσα στις εντολές της SQL μπορούμε να κάνουμε και τις τέσσερις βασικές αριθμητικές πράξεις πάνω στις στήλες μιας εντολής Select. Ακολουθούν παραδείγματα.

Select Name, Address, Poso

        From Clients

                Where 0.5 * Poso > 100000;

 

Μάθημα 11 - Οι Αριθμητικές Συναρτήσεις

Μπορούμε να χρησιμοποιήσουμε αριθμητικές συναρτήσεις σε μια εντολή Select. Οι συναρτήσεις αυτές είναι οι εξής :

Οι παραπάνω συναρτήσεις επιδρούν σε κάθε επιλεγόμενη γραμμή ενός ερωτήματος, ενώ οι παρακάτω συναρτήσεις επιδρούν σε μια ομάδα επιλεγόμενων γραμμών και επιστρέφουν μία μόνο τιμή για πολλές γραμμές :

Ακολουθούν παραδείγματα.

Select Sum(Poso)

        From Clients;

Select Count(Name)

        From Clients;

Η συνάρτηση Count() αγνοεί τις τιμές Null αλλά μετρά τις επαναλαμβανόμενες τιμές, οπότε πρέπει να την χρησιμοποιήσουμε σε συνδυασμό με την δήλωση Distinct για να μπορέσουμε να μετρήσουμε τις διακριτές τιμές ενός πεδίου.

Για να κάνουμε συνδυασμό των δύο παραπάνω τύπων συναρτήσεων, πρέπει να δημιουργήσουμε ένα υποερώτημα (subquery) για να εξάγουμε μια τιμή από μια συνάρτηση ομάδας και να την χρησιμοποιήσουμε για σύγκριση στο βασικό ερώτημα. Ακολουθεί ένα παράδειγμα.

Select Name, Address, Poso

        From Clients

                Where Poso >

                        (Select Avg(Poso) From Clients);

 

Μάθημα 12 - Η Δήλωση Group By

Με την δήλωση Group By είναι δυνατό να ομαδοποιήσουμε τις γραμμές ενός πίνακα σε ομάδες, έτσι ώστε οι γραμμές που υπάρχουν σε κάθε ομάδα να έχουν την ίδια τιμή για κάποια στήλη του πίνακα. Μπορούμε να ομαδοποιήσουμε και με βάση περισσότερες από μία στήλες και πρέπει να έχουμε υπόψη μας ότι η δήλωση Group By πρέπει να γράφεται τελευταία. Ακολουθεί ένα παράδειγμα.

Select OrderDate, Sum(OrderValue)

        From Orders

                Group By OrderDate;

Θα εμφανισθούν οι ημερομηνίες καθώς και το άθροισμα της αξίας των παραγγελιών ανά ημερομηνία. Με την ομαδοποίηση γίνεται αναγκαστικά και ταξινόμηση των ομάδων των γραμμών του πίνακα με βάση την στήλη που έχουμε χρησιμοποιήσει στην δήλωση Group By.

 

Μάθημα 13 - Η Δήλωση Having

Για να μπορέσουμε να επιλέξουμε (απομονώσουμε) κάποιες γραμμές ενός πίνακα όταν κάνουμε ομαδοποίηση σ' αυτόν, χρησιμοποιούμε την δήλωση Having. Η δήλωση Having εφαρμόζεται στις γραμμές μιας ομάδας. Ακολουθεί ένα παράδειγμα.

Select OrderDate, Count(*), Sum(OrderValue), Avg(OrderValue)

        From Orders

                Group By OrderDate

                        Having Avg(OrderValue) > 50000;

Θα εμφανισθούν το πλήθος των παραγγελιών, το άθροισμα της αξίας των παραγγελιών καθώς και ο μέσος όρος της αξίας των παραγγελιών αλλά μόνο για τις ημερομηνίες εκείνες που οι παραγγελίες είχαν μέσο όρο μεγαλύτερο από 50.000.

 

Μάθημα 14 - Οι Συναρτήσεις Χαρακτήρων

Η Oracle διαθέτει τις εξής συναρτήσεις για τις αλφαριθμητικές τιμές (strings) :

 

Μάθημα 15 - Η Τιμή Null

Η τιμή Null αποτελεί μια ειδική περίπτωση. Δεν είναι ίση με το 0 ή με το κενό, απλά δηλώνει μια ανύπαρκτή τιμή. Μπορούμε να χρησιμοποιήσουμε τις φράσεις Is Null και Is Not Null σε δηλώσεις Where για να επιλέξουμε γραμμές που δεν έχουν τιμές ή που έχουν κάποιες τιμές σε κάποια συγκεκριμένη στήλη.

Οταν χρησιμοποιούμε την δήλωση Order By, εμφανίζονται πάντα πρώτες οι γραμμές που έχουν τιμές Null, άσχετα με την ταξινόμηση που έχουμε ορίσει. Οι συναρτήσεις ομάδας, όπως είναι η Count() και η Sum(), δεν λαμβάνουν υπόψη τους τις τιμές Null.

Αν χρησιμοποιηθεί ένα πεδίο που έχει τιμή Null σε μια έκφραση υπολογισμού, τότε το αποτέλεσμα της έκφρασης θα είναι πάντα Null. Για να το αποφύγουμε αυτό, που μπορεί να μας δημιουργήσει και προβλήματα, μπορούμε να χρησιμοποιήσουμε την συνάρτηση Nvl(), η οποία δέχεται σαν ορίσματα το όνομα ενός πεδίου και μια τιμή που θα χρησιμοποιηθεί όταν η τιμή του πεδίου είναι ίση με Null. Συνήθως, αυτό το δεύτερο όρισμα το θέτουμε ίσο με 0.

Ακολουθούν παραδείγματα.

Select Name, Address, Poso

        From Clients

                Where Poso Is Null;

Select OrderId, OrderClientId, OrderDate, OrderValue

        From Orders

                Where OrderDate Is Not Null;

Select Name, Address, Nvl(Poso, 0)

        From Clients

 

Μάθημα 16 - Τα Υποερωτήματα (Subqueries)

Τα υποερωτήματα (subqueries) είναι ερωτήματα που τα χρησιμοποιούμε στην δήλωση Where άλλων ερωτημάτων. Τα χρησιμοποιούμε όταν πρέπει να δημιουργήσουμε ερωτήματα τα οποία χρειάζονται στοιχεία που προκύπτουν από την εκτέλεση άλλων ερωτημάτων. Το αποτέλεσμα από την χρήση ενός υποερωτήματος δεν εμφανίζεται αλλά βοηθάει στην εκτέλεση του κύριου ερωτήματος. Το υποερώτημα επιστρέφει πάντα μία μόνο τιμή.

Για παράδειγμα, αν θέλουμε να εμφανίσουμε τους πελάτες που έχουν μέσο όρο στο πεδίο Poso μεγαλύτερο από τον μέσο όρο όλων των πελατών, θα πρέπει να δημιουργήσουμε ένα υποερώτημα που να υπολογίζει τον μέσο όρο όλων των πελατών και να το χρησιμοποιήσουμε μέσα σε παρενθέσεις στην δήλωση Where του βασικού ερωτήματος.

Ακολουθούν παραδείγματα.

Select Name, Address, Poso

        From Clients

                Where Poso > (Select Avg(Poso) From Clients);

Select ClientId, Name, Address, Poso

        From Clients

                Where ClientId = (Select OrderClientId From Orders Where OrderId = '100');

 

Μάθημα 17 - Οι Δηλώσεις Union, Intersection και Minus

Με τις δηλώσεις αυτές μπορούμε να κάνουμε Ενωση (Union), Τομή (Intersection) και Διαφορά (Minus) στις τιμές που επιλέγονται με βάση κάποιο υποερώτημα από διάφορους πίνακες. Οι λειτουργίες που κάνουν είναι οι εξής :

Ακολουθεί ένα παράδειγμα.

Select Desc1, Item1, Poso1

        From Table1

        Union

        Select Desc2, Item2, Poso2

                From Table2

 

Μάθημα 18 - Τα Συσχετισμένα Υποερωτήματα

Το χαρακτηριστικό γνώρισμα αυτών των υποερωτημάτων είναι ότι ο πίνακας στον οποίο δημιουργείται το ερώτημα αναφέρεται και με ψευδώνυμο (alias) μέσα στο κύριο ερώτημα. Ακολουθεί ένα παράδειγμα.

Select Name, Address, Poso

        From Clients C

                Where Poso > (Select Avg(Poso) From Clients Where C.Poli = Poli);

Εμφανίζεται ο μέσος όρος του πεδίου Poso για τους πελάτες κάθε διαφορετικής πόλης. Το υποερώτημα υπολογίζει τον μέσο όρο για κάθε πόλη και μετά χρησιμοποιείται αυτό το αποτέλεσμα για να εμφανισθούν τα στοιχεία των πελατών που περιέχουν ποσό μεγαλύτερο από τον υπολογισθέντα μέσο όρο.

 

Μάθημα 19 - Δημιουργία Πίνακα

Για να δημιουργήσουμε έναν πίνακα (table), δηλώνουμε το όνομα του πίνακα, τα πεδία (στήλες) που θα περιέχει, τον τύπο δεδομένων των πεδίων καθώς και το μήκος του κάθε πεδίου, με την εξής σύνταξη :

Create Table όνομα_πίνακα

        (όνομα_στήλης1, όνομα_στήλης2, ...);

Ακολουθεί ένα παράδειγμα.

Create Table Friends

        (FriendId char(5) Not Null, Name char(20) Not Null, Phone char(10), BDate date, Poso number(10, 2));

Οι τύποι δεδομένων των πεδίων ενός πίνακα είναι οι εξής :

Για ένα πεδίο μπορούμε να δηλώσουμε να είναι του τύπου Not Null, που σημαίνει ότι θα πρέπει υποχρεωτικά να υπάρχει κάποια τιμή για το πεδίο αυτό.

 

Μάθημα 20 - Εισαγωγή Νέων Πεδίων σε Πίνακα

Για να εισάγουμε νέα πεδία σ' έναν ήδη υπάρχοντα πίνακα, χρησιμοποιούμε την εξής σύνταξη :

Alter Table όνομα_πίνακα

        Add (ορισμοί_πινάκων);

Ακολουθούν παραδείγματα.

Alter Table Clients

        Add (City Char(10));

Alter Table Friends

        Add (Mobile Char(10));

Τα νέα πεδία προστίθενται στα δεξιά της τελευταίας στήλης του πίνακα και δεν μπορούμε να τα δηλώσουμε σαν Not Null.

 

Μάθημα 21 - Εισαγωγή Νέων Γραμμών σε Πίνακα

Για να καταχωρήσουμε νέες γραμμές (εγγραφές) σ' έναν πίνακα, χρησιμοποιούμε την εξής σύνταξη :

Insert Into όνομα_πίνακα

        Values (λίστα_τιμών);

Ακολουθεί ένα παράδειγμα.

Insert Into Clients

        Values ('100', 'Παπαδόπουλος', 'Π. Μελά 100', '03850-22222', 1000.00);

Η λίστα_τιμών πρέπει να περιέχει τις τιμές των πεδίων του πίνακα με την ίδια σειρά που δηλώθηκαν κατά την δημιουργία του πίνακα ή όπως εμφανίζονται αν δώσουμε την εξής εντολή :

Select * From όνομα_πίνακα;

Μπορούμε να καταχωρήσουμε νέες εγραφές σ' έναν πίνακα, επιλέγοντας με υποερώτημα (subquery) εγγραφές από έναν άλλον πίνακα, ως εξής :

Create Table Friends

        (FriendId char(5) Not Null, Name char(20) Not Null, Phone char(10), BDate date, Poso number(10, 2));

Insert Into Friends (FriendId, Name, Phone, BDate, Poso) As

        (Select ClientId, Name, Phone, Date, Poso

                From Clients

                        Where Poso > 100000);

 

Μάθημα 22 - Τροποποίηση των Τιμών Πεδίου Πίνακα

Για να αλλάξουμε τις τιμές των πεδίων ενός πίνακα, δίνουμε την εξής εντολή :

Update όνομα_πίνακα

        Set πεδίο1 = τιμή1, πεδίο2 = τιμή2, ...

                Where συνθήκη;

Σε κάθε εγγραφή που ικανοποιεί την συνθήκη, οι τιμές των πεδίων που υπάρχουν στην δήλωση Set αντικαθίστανται από την νέα τιμή. Ακολουθούν παραδείγματα.

Update Clients

        Set Poso = 200000

                Where Poso = 100000;

Update Clients

        Set Poso = Poso * 1.10

                Where Name In (Select Name From Friends);

 

Μάθημα 23 - Διαγραφή Γραμμών Πίνακα

Για να διαγράψουμε τις εγγραφές ενός πίνακα που ικανοποιούν κάποια συνθήκη, χρησιμοποιούμε την εξής σύνταξη :

Delete From όνομα_πίνακα

        Where συνθήκη;

Αν παραλείψουμε την δήλωση Where, θα διαγραφούν όλες οι εγγραφές του πίνακα.

Ακολουθούν παραδείγματα.

Delete From Clients

        Where Poso < 50000;

Delete From Clients

        Where Name In (Select Name From Friends);

 

Μάθημα 24 - Τροποποίηση Πεδίου Πίνακα

Για να αλλάξουμε τα χαρακτηριστικά κάποιας στήλης ενός πίνακα, δίνουμε την εξής εντολή :

Alter Table όνομα_πίνακα

        Modify (ορισμοί_στηλών);

Μέσα στις παρενθέσεις γράφουμε τα νέα χαρακτηριστικά της στήλης, όπως μήκος, τύπος κ.ά., αλλα δεν μπορούμε να μικραίνουμε το μήκος της στήλης.

Ακολουθεί ένα παράδειγμα.

Alter Table Clients

        Modify (Name char(30));

Πρέπει να έχουμε υπόψη μας ότι όταν κάνουμε αλλαγές στις τιμές των εγγραφών ή στα χαρακτηριστικά των πεδίων ενός πίνακα, οι αλλαγές αυτές δεν αποθηκεύονται στην βάση δεδομένων και δεν εμφανίζονται έτσι σ' έναν χρήστη της βάσης δεδομένων. Για να γίνει αυτό, πρέπει να δώσουμε την εντολή Commit και η Oracle να απαντήσει με commit complete.

Αν δεν θέλουμε να καταχωρηθεί κάποια αλλαγή στην βάση δεδομένων, πρέπει αντί για την εντολή Commit να δώσουμε την εντολή RollBack και η Oracle να απαντήσει με rollback complete.

 

Μάθημα 25 - Αντιγραφή Πίνακα

Αν θέλουμε να αντιγράψουμε έναν πίνακα μ' ένα άλλο όνομα αλλά και να διατηρήσουμε τον αρχικό πίνακα, δηλ. η γνωστή μας λειτουργία Save As, υπάρχουν οι εξής δύο τρόποι για να το κάνουμε :

 

Μάθημα 26 - Διαγραφή Πίνακα

Για να διαγράψουμε έναν πίνακα, δίνουμε την εξής εντολή :

Drop Table όνομα_πίνακα;

Ακολουθεί ένα παράδειγμα.

Drop Table Friends;

Πρέπει να έχουμε υπόψη μας ότι μετά την εκτέλεση της εντολής Drop γίνεται αυτόματα και Commit και έτσι δεν μπορούμε να κάνουμε αναίρεση της διαγραφής ενός πίνακα.

 

Μάθημα 27 - Οι Δείκτες (Indexes)

Με την χρήση των δεικτών (indexes), οι οποίοι είναι παρόμοιοι στην δομή με τους δείκτες άλλων γλωσσών, μπορούμε να επιταχύνουμε την αναζήτηση πληροφοριών. Η αναζήτηση βασίζεται μόνο σε στήλη που έχει δηλωθεί σαν δείκτης (index). Για να δημιουργήσουμε έναν δείκτη, δίνουμε την εξής εντολή :

Create Index όνομα_δείκτη

        On πίνακας(στήλη);

Ακολουθεί ένα παράδειγμα.

Create Index ClId

        On Clients(ClientId);

Αν εκτελέσουμε ένα ερώτημα και η δήλωση Where βασίζεται σε μια στήλη που έχουμε δηλώσει σαν index, τότε η Oracle θα κάνει τις αναζητήσεις της στον πίνακα δείκτη (index table) για να έχει έτσι ταχύτερη πρόσβαση στα δεδομένα. Αν έχουμε χρησιμοποιήσει την δήλωση Unique πριν από το όνομα του δείκτη, τότε η SQL* θα ελέγχει ώστε οι τιμές της στήλης που έχει δηλωθεί σαν δείκτης να είναι μοναδικές.

Ακολουθεί ένα παράδειγμα.

Create Unique Index ClId

        On Clients(ClientId);

Για να διαγράψουμε έναν δείκτη, δίνουμε την εξής εντολή :

Drop Index Clid;

Ο δείκτης παύει να είναι ενεργός ενώ ο πίνακας που τον περιέχει δεν παθαίνει απολύτως τίποτα.

 

Μάθημα 28 - Οι Οψεις (Views)

Μια όψη (view) είναι σαν ένα φίλτρο μέσα από το οποίο μπορούμε να έχουμε μια διαφορετική μορφή των στοιχείων μιας βάσης δεδομένων. Οι όψεις χρησιμοποιούνται όπως και οι πίνακες, αλλά δεν καταλαμβάνουν χώρο στον δίσκο και εξαρτώνται από τον ή τους πίνακες στους βασίζεται μια όψη. Γι' αυτό αποκαλούνται και εικονικοί πίνακες (virtual tables). Με τις όψεις μπορούμε να απομονώσουμε κάποια στοιχεία μιας βάσης δεδομένων.

Για να δημιουργήσουμε μια όψη, η σύνταξη είναι η εξής :

Create View όνομα_όψης

        As ερώτημα

Κατά την δημιουργία μιας όψης με βάση ένα ερώτημα, δεν μπορούμε να χρησιμοποιήσουμε την δήλωση Order By. Αφού έχουμε δημιουργήσει μια όψη, θα μπορεί να χρησιμοποιηθεί σαν ένας οποιοσδήποτε πίνακας και κάθε αλλαγή που κάνουμε στον πίνακα θα φαίνεται και σ' όλες τις όψεις που εξαρτώνται απ' αυτόν τον πίνακα.

Ακολουθεί ένα παράδειγμα μιας όψης που εμφανίζει (απομονώνει) από τον πίνακα πελατών εκείνους που το όνομά τους περιέχει τους χαρακτήρες 'ίδη' :

Create View ClientPodiac

        As Select ClientId, Name, Address, Phone, Poso

                From Clients

                        Where Name Like '%ίδη%';

 

Μάθημα 29 - Μορφοποίηση Εκτυπώσεων με την SQL*Plus

Στην SQL*Plus έχουμε την δυνατότητα να παρουσιάζουμε τα αποτελέσματα της επεξεργασίας ενός πίνακα μορφοποιημένα, με τίτλους, επικεφαλίδες, αρίθμηση σελίδων κ.ά. Με την χρήση της SQL*Plus θα μπορούμε να κάνουμε τα εξής :

Η παρουσίαση των αποτελεσμάτων των εντολών της SQL σε καθαρή και ευανάγνωστη μορφή λέγεται Report (αναφορά ή έκθεση) και η διαδικασία δημιουργίας μιας Report αποκαλείται Report Generation.

Για να ορίσουμε επικεφαλίδες για τις στήλες μιας αναφοράς, η σύνταξη είναι η εξής :

Column όνομα_στήλης Heading επικεφαλίδα;

Ακολουθεί ένα παράδειγμα :

Column Name Heading 'Ονομα|Πελάτη';

Η χρήση του χαρακτήρα | έχει σαν αποτέλεσμα να εμφανίζεται η επικεφαλίδα σε δύο γραμμές.

Με την δήλωση Format μπορούμε να μορφοποιήσουμε την εμφάνιση του περιεχομένου μιας στήλης και με την δήλωση Like να αντιγράψουμε μια ήδη υπάρχουσα μορφοποίηση μιας στήλης.

Με την δήλωση TTitle μπορούμε να δημιουργήσουμε τίτλο στην κορυφή μιας σελίδας (κεφαλίδα) και με την δήλωση BTitle υπότιτλο στην βάση μιας σελίδας (υποσέλιδο). Με τις δηλώσεις Center, Left και Right μπορούμε να ορίσουμε την στοίχιση των τίτλων.

Ακολουθούν παραδείγματα.

TTitle Center 'Πελάτες Εταιρείας ABC';

BTitle Right 'Ακαδημίας 100 - 101 52  Αθήνα';

Με την δήλωση Break μπορούμε να ομαδοποιήσουμε (group) τις γραμμές με βάση την τιμή κάποιας στήλης. Η σύνταξή της είναι ως εξής :

Break On όνομα_στήλης;

Ακολουθεί ένα παράδειγμα.

Break On Poli Skip 1;

Με την δήλωση Skip 1 εμφανίζεται μια κενή γραμμή ανάμεσα στις ομάδες.

Με την δήλωση Compute μπορούμε να κάνουμε υπολογισμούς στις τιμές κάποιων στηλών για τις γραμμές μιας ομάδας. Η σύνταξή της είναι η εξής :

Compute Sum Of στήλη1, στήλη2, ... On στήλη_ομαδοποίησης;

Κάθε φορά που αλλάζει η τιμή της στήλης που χρησιμοποιείται για την ομαδοποίηση, υπολογίζεται το ενδιάμεσο άθροισμα των τιμών για τα μέλη της ομάδας. Αντί για την εντολή Sum μπορούμε να χρησιμοποιήσουμε και τις εντολές Min, Max, Avg και Count.

 

Μάθημα 30 - Η Εντολή Grant

Με την εντολή Grant μπορούμε να δώσουμε δικαιώματα χρήσης ή προνόμια (privileges) σ' άλλους χρήστες της Oracle. Ο δημιουργός ενός πίνακα γίνεται αυτόματα και ιδιοκτήτης του και έχει το δικαίωμα να παραχωρήσει άδειες (προνόμια) χρήσης του πίνακα με την εντολή Grant, η οποία έχει την εξής σύνταξη :

Grant προνόμια

        On αντικείμενο

                To χρήστης;

Οι άδειες που μπορούμε να εκχωρήσουμε είναι οι εξής : Select, Insert, Update, Delete, Alter, Index και Cluster, ενώ με την επιλογή All μπορούμε να εκχωρήσουμε όλες τις παραπάνω άδειες.

Ακολουθεί ένα παράδειγμα.

Grant Insert, Update, Delete

        On Clients

                To user01, user02

                        With Grant Option;

Η δήλωση With Grant Option σημαίνει ότι ο χρήστης στον οποίο παραχωρούμε τα δικαιώματα, μπορεί με την σειρά του να τα παραχωρήσει και σ' έναν τρίτο χρήστη. Μπορούμε να εκχωρήσουμε δικαιώματα και σε όψεις (views) εκτός από πίνακες (tables), για να μπορούμε έτσι να περιορίσουμε την πρόσβαση των χρηστών σε συγκεκριμένα στοιχεία ενός πίνακα.

 

Μάθημα 31 - Η Εντολή Revoke

Με την εντολή Revoke μπορούμε να αφαιρέσουμε (ανακαλέσουμε) τις άδειες που έχουμε εκχωρήσει σ' έναν χρήστη με την εντολή Grant. Η σύνταξη της εντολής Revoke είναι η εξής :

Revoke προνόμια

        On πίνακας/όψη

                From χρήστης;

 

Μάθημα 32 - Η Δήλωση Public

Με την δήλωση Public μπορούμε να παραχωρήσουμε άδειες σ' όλους τους χρήστες μιας βάσης δεδομένων, ακόμη και σ' αυτούς που θα προστεθούν μετά την παραχώρηση της άδειας.

Ακολουθούν παραδείγματα.

Grant All

        On Clients

                To Public;

Grant Select, Insert

        On Friends

                To user01

                        With Grant Option;

Revoke All

        On Clients

                From user02;

 

back.gif (9867 bytes)

Επιστροφή