PL/SQL. Κώστας Στεφανίδης

Σχετικά έγγραφα
ΕΠΛ 342 Βάσεις εδοµένων

Βάσεις δεδομένων. (10 ο μάθημα) Ηρακλής Βαρλάμης

ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΤΜΗΜΑ ΜΑΘΗΜΑΤΙΚΩΝ

MySQL stored procedures

Αποθηκευμένες Διαδικασίες Stored Routines (Procedures & Functions)

ΖΗΤΗΜΑ 1 Ο : (Μονάδες 3) Να χαρακτηριστούν οι παρακάτω προτάσεις ως σωστές ή εσφαλμένες :

Εργαστήριο βάσεων δεδομένων. MySQL Stored Procedures

ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΤΜΗΜΑ ΜΑΘΗΜΑΤΙΚΩΝ

Ενεργές ΒΔ. Παύλος Εφραιμίδης pefraimi <at> ee.duth.gr. Βάσεις Δεδομένων Ενεργές ΒΔ 1

ΚΕΡΑΜΟΠΟΥΛΟΣ ΕΥΚΛΕΙΔΗΣ

ΕΝΑΥΣΜΑΤΑ ΣΤΗΝ POSTGRES

9η Εργαστηριακή Άσκηση: Stored Procedures - Triggers. Αποθηκευμένες Διαδικασίες (Stored Procedures):

ΤΜΗΜΑ ΔΙΟΙΚΗΣΗΣ ΕΠΙΧΕΙΡΗΣΕΩΝ (ΓΡΕΒΕΝΑ)

. Εργαστήριο Βάσεων Δεδομένων. Stored Procedures

ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ - ΤΜΗΥΠ ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ Ι

ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ Ι Ενότητα 3:

Εργαστήριο Ανάπτυξης Εφαρμογών Βάσεων Δεδομένων. Εξάμηνο 7 ο

Εργαστήριο Βάσεων Δεδομένων. Triggers

Προσοµοίωση τροχιάς σε Oracle Spatial 8i DBMS

Βάσεις Δεδομένων 5η εργαστηριακή άσκηση

ΚΕΡΑΜΟΠΟΥΛΟΣ ΕΥΚΛΕΙΔΗΣ

(Μέρος 3:Γλώσσα Ορισµού, Γλώσσα Τροποποίησης, Ενσωµατωµένη SQL) Βάσεις εδοµένων Ευαγγελία Πιτουρά 2

ΑΠΟΘΗΚΕΥΜΕΝΕΣ ΔΙΑΔΙΚΑΣΙΕΣ

H SQL είναι η γλώσσα για όλα τα εμπορικά σχεσιακά συστήματα διαχείρισης βάσεων δεδομένων

Βάσεις Δεδομένων (Databases)

Η γλώσσα προγραμματισμού Strange

- Αναπαράσταση ακέραιας τιµής : - Εύρος ακεραίων : - Ακέραιοι τύποι: - Πράξεις µε ακεραίους (DIV - MOD)

Μέρος 2 Κατασκευή Συντακτικού Αναλυτή

Pascal. 15 Νοεμβρίου 2011

. Εργαστήριο Βάσεων Δεδομένων. Triggers

ΚΕΡΑΜΟΠΟΥΛΟΣ ΕΥΚΛΕΙΔΗΣ

Postgress ΣΤΟΧΟΣ ΣΧΕΤΙΚΟ ΕΚΠΑΙ ΕΥΤΙΚΟ ΥΛΙΚΟ. ΠΕΡΙΒΑΛΛΟΝ ΓΙΑ ΕΞΑΣΚΗΣΗ pgadmin ΥΠΟΒΑΘΡΟ. Συναρτήσεις στην PostgreSQL. 1. Γενικά

Εισαγωγή στον Προγραμματισμό

ΗΥ-360 Αρχεία και Βάσεις Δεδομένων Διδάσκων: Δ. Πλεξουσάκης. Φροντιστήριο SQL Examples Ξένου Ρουμπίνη

Ακεραιότητα και Ασφάλεια Μέρος 1 Σχεδιασμός Βάσεων Δεδομένων

Εκφράσεις. Τύποι, Σταθερές & Μεταβλητές. Ορισµός Μεταβλητών

Έχουµε την βάση της σχολής που αποτελείται από τους παρακάτω πίνακες.

Δομή Επανάληψης. Κεφάλαιο 7 Mike Trimos

Pascal, απλοί τύποι, τελεστές και εκφράσεις

ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ Ι. Ενότητα 9β: SQL (Διαχείριση εγγραφών, Όψεις, Περιορισμοί, Εναύσματα) Ευαγγελίδης Γεώργιος. Τμήμα Εφαρμοσμένης Πληροφορικής

Ορισμοί Σχεσιακού Μοντέλου και Τροποποιήσεις Σχέσεων σε SQL

TO ΥΠΟΠΡΟΓΡΑΜΜΑ ΣΥΝΑΡΤΗΣΗ

10 η Διάλεξη Python Βάσεις δεδομένων στη python

Συστήματα Διαχείρισης Βάσεων Δεδομένων (ΗΥ460) Χειμερινό εξάμηνο 2017

Β. Εισαγωγή στον Προγραμματισμό Η/Υ με την JavaScript

Εργαστήριο Οργάνωσης Η/Υ. Δαδαλιάρης Αντώνιος

Προγραμματισμός Παγκόσμιου Ιστού

Διάλεξη 16: SQL DML IV, SQL DCL, SQL TCL. Διδάσκων: Παναγιώτης Ανδρέου

Ορισμοί Σχεσιακού Μοντέλου και Τροποποιήσεις Σχέσεων σε SQL

Ορισμοί Σχεσιακού Μοντέλου και (απλές)τροποποιήσεις Σχέσεων στην SQL. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

ΘΕΜΑΤΑ. Ερώτηση 1 Κατά τη Φυσική Αποθήκευση (Physical storage) μιας ΒΔ αποθηκεύονται στον δίσκο τα:

Ενότητα 1: «Εισαγωγή στην Αλγοριθμική και τον Προγραμματισμό. Απλές ασκήσεις με γλώσσα Pascal»

ΒΑΣΙΚΟΙ ΤΥΠΟΙ ΔΕΔΟΜΕΝΩΝ

Τμήμα Διοίκησης Επιχειρήσεων

ΜΑΘΗΜΑ / ΤΑΞΗ : ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ / Γ ΕΠΑΛ ΣΕΙΡΑ: ΗΜΕΡΟΜΗΝΙΑ: 27/01/2013

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΜΟΣ Εντολές επιλογής και αποφάσεων 1 ο Φύλλο Εργασιών Εισαγωγικές ασκήσεις για την εντολή if ΑΠΑΝΤΗΣΕΙΣ

Υπολογιστικά Συστήματα

Κεφάλαιο 12 Υλοποίηση Stored Procedures, Χρήση Ευρετηρίων

ΠΡΟΤΕΙΝΟΜΕΝΑ ΘΕΜΑΤΑ-ΦΡΟΝΤΙΣΤΗΡΙΟ ΑΚΑΔΗΜΑΪΚΟ ΕΠΑΛ- ΚΑΝΙΓΓΟΣ 13- ΤΗΛ

ΠΑΝΕΠΙΣΤΗΜΙΟ AΙΓΑIΟΥ & ΑΕΙ ΠΕΙΡΑΙΑ Τ.Τ. Τμήματα Ναυτιλίας και Επιχειρηματικών Υπηρεσιών & Μηχ. Αυτοματισμού ΤΕ. Εισαγωγή στη Python

Αντίρριο, 14/03/2017 Προδιαγραφές Εργαστηριακής Εργασίας για το μάθημα «Μεταγλωττιστές»

ΕΠΛ 342 Βάσεις εδοµένων

Κεφάλαιο 7: Υποπρογράμματα. Αρχές Γλωσσών Προγραμματισμού και Μεταφραστών

Pascal. 26 Οκτωβρίου 2011

Αλγοριθμική & Δομές Δεδομένων- Γλώσσα Προγραμματισμού Ι (PASCAL) (PASCAL ) Εντολές Ελέγχου & Επανάληψης

ΜΑΗΣ ΕΞΕΤΑΣΤΙΚΟ ΔΟΚΙΜΙΟ

Εντολή Δεδομένα Περιεχόμενα μετά την εκτέλεση 1 read(x) 122 x= 2 read(a,b,c) a= b= c= 3 read(d,e)

Εισαγωγή στην πληροφορική

Βάσεις Δεδομένων. Βασίλειος Βεσκούκης Εισαγωγή στη γλώσσα SQL (Structured Query Language) Η γλώσσα SQL

ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ - ΤΜΗΥΠ ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ ΙI

Κεφάλαιο 6 Υλοποίηση Γλωσσών Προγραμματισμού

Κεφάλαιο 7: Υπορουτίνες

Ακολουθιακές εντολές. (Peter Ashenden, The Students Guide to VHDL)

ΚΕΦΑΛΑΙΟ 10 ΕΝΤΟΛΕΣ ΕΠΙΛΟΓΗΣ (ή εντολές Ελέγχου και Επιλογής ή εντολές Επιλογής και Απόφασης)

MySQL + Γλώσσα Προγραμματισμού. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Αναφορές

Αποτελέσματα προόδου

ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ

( Boats)) ( Tempsids, bid. sname. Boats. Boats. Boats. (Reserves)/ > Reserves. Interlake' Sailors) ...

ΗΥ-150. Προγραμματισμός

ΦΡΟΝΤΙΣΤΗΡΙΟ ΣΤΗ ΓΛΩΣΣΑ SQL

ΗΥ-150. Προγραμματισμός

Ορισµοί Σχεσιακού Μοντέλου και Τροποποιήσεις Σχέσεων σε SQL

(Κεφάλαιο 2.7 και 12) Αρχεία στην C. (Διάλεξη 15)

Αρχεία Ένα αρχείο αποτελείται από μία σειρά ομοειδών δεδομένων που ονομάζονται λογικές εγγραφές (logical record)

ΓΛΩΣΣΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ PASCAL

ΠΙΝΑΚΑΣ ΠΕΡΙΕΧΟΜΕΝΩΝ

Οι εντολές CREATE TABLE, ALTER TABLE, CREATE KEY, ALTER KEY.

Η γλώσσα προγραμματισμού EEL

Ιατρική Πληροφορική. Δρ. Π. ΑΣΒΕΣΤΑΣ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΒΙΟΪΑΤΡΙΚΗΣ ΤΕΧΝΟΛΟΓΙΑΣ Τ.Ε.

Βάσεις Δεδομένων και Ευφυή Πληροφοριακά Συστήματα Επιχειρηματικότητας. 3ο Μάθημα: Εισαγωγή στην SQL. Δρ. Κωνσταντίνος Χ.

Εισαγωγή στην C. Μορφή Προγράµµατος σε γλώσσα C

Οι εντολές CREATE TABLE, ALTER TABLE, CREATE KEY, ALTER KEY.

ΤΑΞΙΝΟΜΗΣΗ ΑΠΟΤΕΛΕΣΜΑΤΩΝ ΕΡΩΤΗΜΑΤΟΣ

ΜΑΘΗΜΑ / ΤΑΞΗ : ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ / ΕΠΑΛ ΣΕΙΡΑ: ΗΜΕΡΟΜΗΝΙΑ:

Ιατρική Πληροφορική. Δρ. Π. ΑΣΒΕΣΤΑΣ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΒΙΟΪΑΤΡΙΚΗΣ ΤΕΧΝΟΛΟΓΙΑΣ Τ. Ε. Χρήσιμοι Σύνδεσμοι

ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΙΓΑIΟΥ & ΑΕΙ ΠΕΙΡΑΙΑ Τ.Τ.

Βάσεις Δεδομένων ΗγλώσσαSQL (Structured Query Language)

ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ Ι. Ενότητα 9α: Περιορισμοί (Constraints) Εναύσματα (Triggers) Ευαγγελίδης Γεώργιος Τμήμα Εφαρμοσμένης Πληροφορικής

Αλγοριθμική & Δομές Δεδομένων- Γλώσσα Προγραμματισμού Ι (PASCAL)

Transcript:

PL/SQL Κώστας Στεφανίδης

Βασική ομή DECLARE /* Μεταβλητές και τύποι */ BEGIN /* ιαδικασίες και εντολές PL/SQL*/ /* Είναι το μόνο τμήμα που απαιτείται */ EXCEPTION /* Εντολές χειρισμού λαθών */ END;

Βασική ομή (2) Για να εκτελέσουμε ένα πρόγραμμα PL/SQL γράφουμε μετά τον κώδικα: Μια γραμμή που περιέχει μόνο μία τελεία (. ) Μια γραμμή με την λέξη run; Η εκτέλεση γίνεται: Γράφοντας τις εντολές στην γραμμή εντολών της sqlplus Γράφοντας τον κώδικα σε ένα αρχείο και καλώντας το από την sqlplus (@codefile.sql)

Μεταβλητές και τύποι Τύποι μεταβλητών: NUMBER (ακέραιοι ή πραγματικοί αριθμοί) VARCHAR(n) Γενικα, τύποι της sqlplus για προσδιορισμό των στηλών ενός πίνακα BOOLEAN Ίδιος με τον τύπο μίας στήλης ενός πίνακα Εγγραφή με πολλά πεδία (record) Η αρχική τιμή μεταβλητών είναι NULL Οι μεταβλητές δεν πρέπει να έχουν ίδιο όνομα με στήλες πινάκων Στις μεταβλητές ανατίθεται τιμή με τον τελεστή :=

Παραδείγματα DECLARE amount NUMBER(7,3); price NUMBER; mybeer varchar(30); purchasedate DATE; isgood BOOLEAN; yourbeer Beers.name%TYPE; beertuple Beers%ROWTYPE; Beers (name, price)

Παραδείγματα (2) DECLARE price NUMBER := 3; mybeer varchar(30); BEGIN price := price + 2; mybeer := Amstel ; END;. run; Beers (name, price)

Εντολές SQL στην PL/SQL Εντολές SQL που επιτρέπονται: SELECT INSERT UPDATE DELETE Εντολές SQL που δεν επιτρέπονται: CREATE DROP ALTER

Παράδειγμα Αρχικός πίνακας T: col1 col2 --------------------- 1 3 2 4 PL/SQL κώδικας: DECLARE a T.col1%TYPE; b T. col2%type; BEGIN SELECT col1, col2 INTO a,b FROM T WHERE col1 > 1; INSERT INTO T VALUES(b, a); END;. run;

Παράδειγμα (2) Πίνακας T μετά την εκτέλεση του PL/SQL κώδικα: col1 col2 -------------- 1 3 2 4 4 2

Εντολές SQL στην PL/SQL (2) Η PL/SQL μας επιτρέπει να εκτιμήσουμε τι συνέβη με την εκτέλεση μιας SQL εντολής: SQL%ROWCOUNT: ο αριθμός των γραμμών που επεξεργάστηκε η εντολή SQL%FOUND: TRUE αν επεξεργάστηκε τουλάχιστον μία γραμμή SQL%NOTFOUND: TRUE αν δεν επεξεργάστηκε καμία γραμμή

Παράδειγμα Beers (name, price) delhistory (table_name, delrows, date) DECLARE rowsdeleted NUMBER; BEGIN DELETE FROM Beers WHERE price < 2; rowsdeleted := SQL%ROWCOUNT; INSERT INTO delhistory VALUES( Beers, rowsdeleted, SYSDATE); END;. run;

Χειρισμός λαθών Σύνταξη: EXCEPTION WHEN exception-identifier THEN actions; Αναγνωριστικά λαθών στην PL/SQL (παραδείγματα): NO_DATA_FOUND TOO_MANY_ROWS

Παράδειγμα Beers (name, price) Error_Table (comments) DECLARE b_name Beers.name%TYPE; b_price Beers.price%TYPE; BEGIN SELECT name, price INTO b_name, b_price FROM Beers WHERE price BETWEEN 2 AND 5;... EXCEPTION WHEN NO_DATA_FOUND THEN INSERT INTO error_table VALUES( no such price ); END;. run;

Έλεγχος ροής ΗεντολήIF Σύνταξη: IF <condition> THEN <statement-list> ELSE <statement-list> END IF; ή IF <condition1> THEN <statement-list> ELSIF <condition_2> THEN <statement-list>... ELSIF <condition_n> THEN <statement-list> ELSE <statement-list> END IF;

Παράδειγμα DECLARE a NUMBER; b NUMBER; BEGIN SELECT e,f INTO a, b FROM T WHERE e > 1; IF b=1 THEN INSERT INTO T VALUES(b, a); ELSE INSERT INTO T VALUES(b+10, a+10); END IF; END;. run; T (e, f)

Έλεγχος ροής (2) ΗεντολήLOOP Σύνταξη: LOOP <loop-body> /* λίστα από PL/SQL εντολές */ END LOOP; Τουλάχιστον μία από τις εντολές στο loop-body πρέπει να είναι της μορφής: EXIT WHEN <condition>;

Παράδειγμα DECLARE i NUMBER := 1; BEGIN LOOP INSERT INTO T VALUES(i, i); i := i + 1; EXIT WHEN i > 100; END LOOP; END;. run; T (e, f)

Έλεγχος ροής (3) ΗεντολήWHILE Σύνταξη: WHILE <condition> LOOP <loop-body> END LOOP;

Παράδειγμα DECLARE i NUMBER := 1; BEGIN WHILE i <= 100 LOOP INSERT INTO T VALUES(i, i); i := i + 1; END LOOP; END;. run; T (e, f)

Έλεγχος ροής(4) ΗεντολήFOR Σύνταξη: FOR <var> IN <start>..<finish> LOOP <lop-body> END LOOP; Ημεταβλητήvar είναι οποιαδήποτε μεταβλητή, είναι τοπική στο σώμα του βρόγχου και δεν χρειάζεται να δηλωθεί Τα <start> και <finish> είναι σταθερές

Παράδειγμα DECLARE i NUMBER; BEGIN FOR i IN 1..100 LOOP INSERT INTO T VALUES(i, i); END LOOP; END;. run; T (e, f)

Cursors Μεταβλητή όπου αποθηκεύουμε ν-άδες κάποιας σχέσης (πίνακας ή αποτέλεσμα ερώτησης) Μπορούμε να διαβάσουμε σειριακά και να επεξεργαστούμε τις τιμές κάθε στοιχείου

Cursors (2) Οι κέρσορες ελέγχονται μέσω τεσσάρων διαφορετικών τύπων actions: DECLARE: δηλώνει των κέρσορα και την ερώτηση SQL που θα εκτελεστεί OPEN: εκτελεί την ερώτηση SQL και «γεμίζει» τις γραμμές του κέρσορα FETCH: φορτώνει τιμές τις τρέχουσας γραμμής του κέρσορα σε μεταβλητές και μετακινεί τον δείκτη του κέρσορα στην επόμενη γραμμή CLOSE: κλείνει τον κέρσορα (ελευθερώνει τη μνήμη)

Cursors (3) ήλωση του κέρσορα σύνταξη: CURSOR identifier IS query-expression; identifier είναι το όνομα του κέρσορα. query-expression είναι μια SELECT εντολή της SQL. Άνοιγμα κέρσορα σύνταξη: OPEN cursor-identifier; Κλείσιμο κέρσορα σύνταξη: CLOSE cursor-identifier; FETCH σύνταξη: FETCH cursor-identifier INTO var, var,

Παίρνοντας πληροφορίες για τους cursors Τιμές ελέγχου: FOUND: TRUE αν η τελευταία εντολή FETCH βρήκε μία γραμμή στον κέρσορα NOTFOUND: το αντίθετο του FOUND ROWCOUNT: επιστρέφει τον αριθμό των γραμμών (records) του κέρσορα ISOPEN: TRUE αν ο κέρσορας είναι ανοικτός (έχει εκτελεστεί η εντολή OPEN)

Παράδειγμα T (e, f) DECLARE a T.e%TYPE; b T.f%TYPE; CURSOR Tcursor IS SELECT e, f FROM T WHERE e < f FOR UPDATE; BEGIN OPEN Tcursor; LOOP FETCH Tcursor INTO a, b; EXIT WHEN Tcursor%NOTFOUND; DELETE FROM T WHERE CURRENT OF Tcursor; INSERT INTO T VALUES(b, a); END LOOP; CLOSE Tcursor; END;. Run;

ιαδικασίες (Procedures) Οι διαδικασίες είναι παρόμοιες με αυτές σε άλλες γλώσσες προγραμματισμού Παράδειγμα: SQL CREATE TABLE T(a INTEGER, bvarchar(10)); PL/SQL CREATE PROCEDURE addtuple1(i NUMBER) AS BEGIN INSERT INTO T VALUES(i, xxx ); END addtuple1;. run;

ιαδικασίες (Procedures) (2) Σύνταξη: CREATE PROCEDURE proc-name (<param-list>)as <local-var-declarations> BEGIN <procedure-body> END proc_name;. run;

ιαδικασίες (Procedures) (3) proc-name: όνομα της διαδικασίας <param-list>: param-id type, param-id είναι το όνομα παραμέτρου type είναι ο τύπος της μεταβλητής

ιαδικασίες (Procedures) (4) Ηεντολήrun στο τέλος απλώς δημιουργεί τη διαδικασία, δεν την εκτελεί Η εκτέλεση γίνεται σε ένα άλλο PL/SQL block ως εξής: BEGIN addtuple1(99); END;. run;

Παράδειγμα CREATE PROCEDURE addtuple2( x T.a%TYPE, y T.b%TYPE) AS BEGIN INSERT INTO T VALUES(x, y); END addtuple2;. run; T (a, b) BEGIN addtuple2(10, abc ); END;. run;

Συναρτήσεις (Functions) Σύνταξη: CREATE FUNCTION fun-name (<param-list>) RETURN <return-type> AS <local-var-declarations> BEGIN <procedure-body> END fun-name;. run;

Συναρτήσεις (Functions) (2) fun-name: όνομα της συνάρτησης <param-list>: όπως στην διαδικασία <return-type>: τύπος μεταβλητής που επιστρέφεται Στο σώμα της συνάρτησης (<procedure-body>) πρέπει να υπάρχει η εντολή RETURN <expression>;

ιαδικασίες - Συναρτήσεις Για να βρούμε ποιες διαδικασίες ή συναρτήσεις έχουμε δημιουργήσει πρέπει να γράψουμε τα εξής στην SQL: SELECT object_type, object_name FROM user_objects WHERE object_type = PROCEDURE OR object_type = FUNCTION ; Για να διαγράψουμε μια διαδικασία ή συνάρτηση: DROP procedure <procedure_name>; DROP function <function_name>;

Ανακαλύπτοντας λάθη Η PL/SQL δεν σας λέει πάντα για τα λάθη μεταγλώττισης ίνει ένα απλό μήνυμα procedure created with compilation errors Για να δούμε τα λάθη δίνουμε την εντολή: show errors procedure <procedure_name>;

Τυπώνοντας Μεταβλητές (Παράδειγμα) DECLARE a NUMBER; b NUMBER; BEGIN SELECT e,f INTO a, b FROM T WHERE e > 1; IF b=1 THEN INSERT INTO T VALUES(b, a); dbms_output.put_line( η τιμήτουbείναι: b); ELSE INSERT INTO T VALUES(b+10, a+10); dbms_output.put_line( η τιμήτουbείναι: b); END IF; END;. run; T (e, f) Για ενεργοποίηση εκτύπωσης μεταβλητών: set serveroutput on