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

Σχετικά έγγραφα
10 η Διάλεξη Python Βάσεις δεδομένων στη python

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

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

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

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

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

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

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

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

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

C: Από τη Θεωρία στην Εφαρμογή

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

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

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

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

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

Προγραμματισμός Υπολογιστών με C++

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

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

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

Βάσεις Δεδομένων Ι SQL Μέρος 3 ο. (Constraints & Joins) Φώτης Κόκκορας (MSc/PhD) Τμήμα Μηχανικών Πληροφορικής ΤΕ

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

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

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

MySQL stored procedures

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

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

Προγραμματισμός Ι (HY120)

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

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

5 η Διάλεξη Python - Αρχεία

Π. Σταθοπούλου ή Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7

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

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

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

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

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

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

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ. 1 ο ΣΧΟΛΕΙΟ ΚΩΔΙΚΑ «Βασικά Θέματα Προγραμματισμού στην Ανάπτυξη Δυναμικών Διαδικτυακών Εφαρμογών» (Part 3) Ουρανία Σμυρνάκη

Προγραμματισμός Ι (HY120)

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

Πανεπιστήµιο Ιωαννίνων Τµήµα Μαθηµατικών Μάθηµα: Βάσεις εδοµένων (741) Εργαστηριακό Τεστ Οµάδα: Α 18/11/2004

Μέρος Γ. 22C901 Βάσεις εδοµένων και Γνώσεων. 9ο Εξάµηνο Κύκλου Σπουδών ΗΥ και Μεταπτυχιακός Κύκλος Σπουδών. Ν. Αβούρης

Π. Σταθοπούλου ή Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7

Ηλεκτρονικοί Υπολογιστές II

Περιεχόμενα. Πρόλογος... 21

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

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

Α. unsigned int Β. double. Γ. int. unsigned char x = 1; x = x + x ; x = x * x ; x = x ^ x ; printf("%u\n", x); Β. unsigned char

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

Σημειώσεις όγδοης εβδομάδας

Προγραμματισμός Η/Υ (ΤΛ2007 )

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ. Διεργασίες και Νήματα Εργαστηριακές Ασκήσεις

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

Προγραμματισμός Ι (ΗΥ120)

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

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

Σημειώσεις έκτης και έβδομης εβδομάδας

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

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

Εργαστήριο ΔΙΕΡΓΑΣΙΕΣ - ΔΙΑΧΕΙΡΙΣΗ

Προγραμματισμός Ι (ΗΥ120)

ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΕΙΡΑΙΩΣ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. Βάσεις Δεδομένων (4 ο εξάμηνο) Εργαστήριο MySQL #3

Π. Σταθοπούλου ή Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7

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

Επεξεργασία Αρχείων Κειµένου

Προγραμματισμός συστημάτων UNIX/POSIX. Διαδιεργασιακή επικοινωνία: αγωγοί (IPC inter-process communication: pipes)

Μεθόδων Επίλυσης Προβλημάτων

είκτες και Πίνακες (2)

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

ΣΧΕΔΙΑΣΜΟΣ ΒΑΣΕΩΝ ΔΕΔΟΜΕΝΩΝ ΕΡΓΑΣΤΗΡΙΟ 3

ΑΡΧΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ

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

Βάσεις Περιβαλλοντικών Δεδομένων

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

Παρακάτω δίνεται o σκελετός προγράμματος σε γλώσσα C. Σχολιάστε κάθε γραμμή του κώδικα.

ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Ενδεικτικές Απαντήσεις Εξετάσεων Α' Περιόδου Θέµα 1. (α') 2 - ii 3 - iii 4 - iv

Δυναμική δέσμευση και αποδέσμευση μνήμης. Προγραμματισμός II 1

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

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

ΑΡΧΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #4

Διάλεξη 17: Προγραμματισμός Βάσης Δεδομένων Ι. Διδάσκων: Παναγιώτης Ανδρέου

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

ΑΡΧΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ

Ενδεικτικές λύσεις και στατιστικά

ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Ενδεικτικές Απαντήσεις Εξετάσεων Β' Περιόδου Θέµα 1. (α')

Εισαγωγή στον Προγραµµατισµό. Πανεπιστήµιο Θεσσαλίας Τµήµα Ηλεκτρολόγων Μηχανικών και Μηχανικών Η/Υ

Βάσεις Δεδομένων Η γλώσσα SQL (Structured Query Language) Εισαγωγή στην SQL (2) Ιστορικά Στοιχεία. SQL - Structured Query Language (1)

Εργαστήριο 2: Πίνακες

Μεθόδων Επίλυσης Προβλημάτων

(Κεφάλαιο 2.7 και 12) Αρχεία στην C. ( ιάλεξη 13) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

Διάλεξη 18: Προγραμματισμός Βάσης Δεδομένων ΙΙ. Διδάσκων: Παναγιώτης Ανδρέου

ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ. Πανεπιστήμιο Πειραιώς Τμήμα Ψηφιακών Συστημάτων Μανουσόπουλος Χρήστος

Φροντιςτήριο. Linked-List

Το σχεσιακό μοντέλο βάσεων δεδομένων

Διάλεξη 18η: Διαχείρηση Αρχείων

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

Η γλώσσα προγραμματισμού C Δυναμική διαχείριση μνήμης

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

Transcript:

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

Ενσωμάτωση SQL εντολών σε μία γενικού σκοπού γλώσσα προγραμματισμού Η φιλόξενη γλώσσα προγραμματισμού έχει στη διάθεση της μια βιβλιοθήκη από συναρτήσεις για κλήσεις στη Βάση Δεδομένων Προγραμματιστική Διεπαφή Εφαρμογών (JDBC) Σχεδιασμός μίας εντελώς νέας γλώσσας. Σχεδιάζεται από την αρχή μια νέα γλώσσα προγραμματισμού Βάσεων Δεδομένων Δρ. Κεραμόπουλος Ευκλείδης 2

Οι εντολές SQL οι οποίες τοποθετούνται μέσα στον κώδικα της γλώσσας υποδοχής συνιστούν την ενσωματωμένη SQL. Οι εντολές SQL μετασχηματίζονται σε κλήσεις συναρτήσεων. Το τελικό εκτελέσιμο λειτουργεί μόνο για ένα DBMS και εκτελείται στον Διακομιστή της Βάσης Δεδομένων. Δρ. Κεραμόπουλος Ευκλείδης 3

Η χρήση των δυνατοτήτων μιας Βάσης Δεδομένων γίνεται με χρήση Διεπαφής (API). Το ίδιο εκτελέσιμο αποκτά πρόσβαση σε πολλά περιβάλλοντα DBMS, χωρίς να χρειάζεται να επαναμεταγλωτίζεται. Το εκτελέσιμο μπορεί να εκτελεστεί και εκτός του Διακομιστή της Βάσης Δεδομένων δίνοντας τη δυνατότητα ταυτόχρονης σύνδεσης με πολλούς και διαφορετικούς Διακομιστές Βάσεων Δεδομένων. Δρ. Κεραμόπουλος Ευκλείδης 4

επόμενη ενότητα

Begin Declare Section δήλωση μεταβλητών End Declare Section Οι μεταβλητές χρησιμοποιούνται μέσα σε προτάσεις SQL με χρήση της «:» Αντιστοιχία τύπων SQL σε τύπους της γλώσσας υποδοχής Αναφορά σφαλμάτων (sqlca.h) SQLSTATE SQLCODE Δρ. Κεραμόπουλος Ευκλείδης 6

Για κάθε γλώσσα υποδοχής υπάρχουν διαφορετικά χαρακτηριστικά και διαφορετικές εντολές για να σημαδεύονται οι SQL εντολές Στην C για παράδειγμα χρησιμοποιούμε το EXEC SQL ; Στην Java υπάρχει το πρότυπο SQLJ και ενσωματώνουμε εντολές σε Java με #SQL Δρ. Κεραμόπουλος Ευκλείδης 7

ο Δημιουργία πίνακα. Χρήση ενσωματωμένης SQL σε C Δρ. Κεραμόπουλος Ευκλείδης 8

#include <stdio.h> #include <stdlib.h> #include <string.h> #include <sqlca.h> EXEC SQL BEGIN DECLARE SECTION; char database[6]; char userid[9]; char passwd[19]; EXEC SQL END DECLARE SECTION; Δρ. Κεραμόπουλος Ευκλείδης 9

int main(int argc, char *argv[]) { if (argc == 4) { strcpy (database, argv[1]); strcpy (userid, argv[2]); strcpy (passwd, argv[3]); EXEC SQL CONNECT TO :database USER :userid using :passwd; else { printf ("\nusage: 1 [database] [userid] [passwd]\n\n"); return 1; Δρ. Κεραμόπουλος Ευκλείδης 10

if (sqlca.sqlcode!= 0 ){ printf("error during logon.\n"); exit(2); else { printf("log on successful. \n"); Δρ. Κεραμόπουλος Ευκλείδης 11

EXEC SQL WHENEVER SQLERROR goto error; EXEC SQL CREATE TABLE supplier (id VARCHAR(5) not null primary key, name VARCHAR(20), status INTEGER, city VARCHAR(15)); EXEC SQL COMMIT; EXEC SQL DISCONNECT; exit(0); Δρ. Κεραμόπουλος Ευκλείδης 12

error: printf("sql error:%ld\n",sqlca.sqlcode); printf("\n%.70s\n",sqlca.sqlerrm.sqlerrmc); EXEC SQL ROLLBACK WORK; exit(1); Δρ. Κεραμόπουλος Ευκλείδης 13

Δρ. Κεραμόπουλος Ευκλείδης 14

Δρ. Κεραμόπουλος Ευκλείδης 15

ecpg 1.pgc gcc -I/usr/include/postgresql -c 1.c gcc -o 1 1.o -lecpg./1 db2lab1 db090 69L14 Δρ. Κεραμόπουλος Ευκλείδης 16

ο Εισαγωγή Δεδομένων Χρήση ενσωματωμένης SQL σε C Δρ. Κεραμόπουλος Ευκλείδης 17

#include <stdio.h> #include <stdlib.h> #include <string.h> #include <ctype.h> #include <sqlca.h> EXEC SQL BEGIN DECLARE SECTION; char supp_id[5]; char supp_name[20]; long int supp_status; char supp_city[15]; char database[6]; char userid[9]; char passwd[19]; EXEC SQL END DECLARE SECTION; Δρ. Κεραμόπουλος Ευκλείδης 18

int main(int argc, char *argv[]) { if (argc == 4) { strcpy (database, argv[1]); strcpy (userid, argv[2]); strcpy (passwd, argv[3]); EXEC SQL CONNECT TO :database USER :userid USING :passwd; else { printf ("\nusage: 2 [database] [userid] [passwd]\n\n"); return 1; /* endif */ if (sqlca.sqlcode!= 0 ){ printf("error during logon.\n"); exit(2); else { printf("log on successful. \n"); Δρ. Κεραμόπουλος Ευκλείδης 19

EXEC SQL WHENEVER SQLERROR goto error while (1) { printf("enter the Supplier's code (or X to end): "); scanf("%s",supp_id); if (supp_id[0] == 'X' supp_id[0] == 'x') { printf("supposed to terminate now...\n"); break; printf("supplier's name: "); scanf("%s",supp_name); printf("supplier's status: "); scanf("%ld",&supp_status); printf("supplier's city: "); scanf("%s",supp_city); Δρ. Κεραμόπουλος Ευκλείδης 20

EXEC SQL INSERT INTO supplier (id,name,status,city) VALUES (:supp_id,:supp_name,:supp_status,:supp_city); printf("sqlca.error.code: %ld\n", sqlca.sqlcode); EXEC SQL COMMIT WORK; printf("record %s added.\n\n",supp_id); EXEC SQL COMMIT WORK; EXEC SQL CONNECT RESET; exit(0); Δρ. Κεραμόπουλος Ευκλείδης 21

error: printf("sql error:%ld\n",sqlca.sqlcode); printf("\n%.70s\n",sqlca.sqlerrm.sqlerrmc); EXEC SQL ROLLBACK WORK; EXEC SQL DISCONNECT; exit(1); Δρ. Κεραμόπουλος Ευκλείδης 22

ο Να παρουσιασθούν τα στοιχεία του (ΕΝΟΣ) προμηθευτή που ο κωδικός του είναι ίδιος με τον κωδικό του προμηθευτή που δίνεται από το πληκτρολόγιο Δρ. Κεραμόπουλος Ευκλείδης 23

#include <stdio.h> #include <stdlib.h> #include <string.h> #include <ctype.h> #include <sqlca.h> EXEC SQL BEGIN DECLARE SECTION; char supp_id[5]; char supp_name[20]; long int supp_status; char supp_city[15]; char database[6]; char userid[9]; char passwd[19]; EXEC SQL END DECLARE SECTION; Δρ. Κεραμόπουλος Ευκλείδης 24

int main(int argc, char *argv[]) { if (argc == 4) { strcpy (database, argv[1]); strcpy (userid, argv[2]); strcpy (passwd, argv[3]); EXEC SQL CONNECT TO :database USER :userid USING :passwd; else { printf ("\nusage: 3 [database] [userid] [passwd]\n\n"); return 1; if (sqlca.sqlcode!= 0 ){ printf("error during logon.\n"); exit(2); else { printf("log on successful. \n"); ; Δρ. Κεραμόπουλος Ευκλείδης 25

EXEC SQL WHENEVER SQLERROR goto error; printf("enter the id number of the Supplier you wish to retrieve: "); scanf("%s",supp_id); EXEC SQL SELECT id,name,status,city INTO :supp_id,:supp_name,:supp_status,:supp_city FROM supplier WHERE id = :supp_id; printf("supplier ID: %s\n",supp_id); printf("name : %s\n",supp_name); printf("status : %ld\n",supp_status); printf("city : %s\n",supp_city); Δρ. Κεραμόπουλος Ευκλείδης 26

error: printf("sql error:%ld\n",sqlca.sqlcode); printf("\n%.70s\n",sqlca.sqlerrm.sqlerrmc); EXEC SQL COMMIT WORK; EXEC SQL DISCONNECT; exit(0); Δρ. Κεραμόπουλος Ευκλείδης 27

Λύνουν το πρόβλημα της αδυναμίας χειρισμού των συνόλων δεδομένων από κάποιες γλώσσες υποδοχής όπως, π.χ. η C Οι Λογικοί δρομείς επιτρέπουν την ανάκτηση μία-προς-μία των εγγραφών. Μπορούμε να έχουμε πολλούς λογικούς δρομείς ταυτόχρονα Δρ. Κεραμόπουλος Ευκλείδης 28

DECLARE όνομα λογικού δρομέα [INSESITIVE] [SCROLL] CURSOR FOR αίτημα [ORDER BY λίστα-ταξινόμησης] [FOR READ ONLY FOR UPDATE] Δρ. Κεραμόπουλος Ευκλείδης 29

Ενεργοποίηση OPEN Ο λογικός δρομέας τοποθετείται αμέσως πριν από την πρώτη πλειάδα Ανάκτηση Μετακίνηση FETCH Μπορούμε να τον μετακινήσουμε μπροστά-πίσω σε όσες θέσεις θέλουμε Απενεργοποίηση CLOSE Δρ. Κεραμόπουλος Ευκλείδης 30

Όταν δηλώνουμε έναν δρομέα ως READ ONLY τότε δεν μπορούν να αλλάξουν οι εγγραφές ενός πίνακα. Ένας δρομέας που έχει χαρακτηριστεί read only δεν μπορεί να χρησιμοποιηθεί στη WHERE CURRENT OF φράση σε μία UPDATE ή DELETE εντολή. Ένας δρομέας χαρακτηρίζεται by default ενημερώσιμος (FOR UPDATE). Δρ. Κεραμόπουλος Ευκλείδης 31

ΔΗΛΩΣΗ ΤΟΥ ΔΡΟΜΕΑ DECLARE NewRatingCursor CURSOR FOR SELECT Sname, rating FROM Sailors FOR UPDATE OF rating ΑΝΟΙΓΜΑ ΤΟΥ ΔΡΟΜΕΑ OPEN NewRatingCursor ΚΑΤΕΒΑΖΟΥΜΕ ΤΙΣ ΤΙΜΕΣ ΤΗΣ ΠΡΟΒΟΛΗΣ ΣΕ ΜΕΤΑΒΛΗΤΕΣ ΤΗΣ ΓΛΩΣΣΑΣ ΥΠΟΔΟΧΗΣ ΜΕΣΑ ΣΕ ΒΡΟΓΧΟ FETCH NewRatingCursor INTO :Sailors_name, :Sailors_rating Δρ. Κεραμόπουλος Ευκλείδης 32

Ο Χρήστης έχει δώσει από το πληκτρολόγιο μία τιμή για το RATING η οποία αποθηκεύεται στο :New_Rating. ΕΝΗΜΕΡΩΣΗ ΤΟΥ ΠΕΔΙΟΥ RATING ΣΤΗΝ ΤΡΕΧΟΥΣΑ ΕΓΓΡΑΦΗ UPDATE Sailors SET rating = :New_rating WHERE CURRENT OF NewRatingCursor ΚΛΕΙΣΙΜΟ ΤΟΥ ΔΡΟΜΕΑ CLOSE NewRatingCursor Δρ. Κεραμόπουλος Ευκλείδης 33

Ο Χρήστης έχει δώσει από το πληκτρολόγιο μία τιμή για το RATING η οποία αποθηκεύεται στο :New_Rating. ΕΝΗΜΕΡΩΣΗ ΤΟΥ ΠΕΔΙΟΥ RATING ΣΤΗΝ ΤΡΕΧΟΥΣΑ ΕΓΓΡΑΦΗ SQL:2003 UPDATE Sailors SET rating = :New_rating WHERE CURRENT OF NewRatingCursor ΚΛΕΙΣΙΜΟ ΤΟΥ ΔΡΟΜΕΑ CLOSE NewRatingCursor Δρ. Κεραμόπουλος Ευκλείδης 34

Όταν ένας δρομέας δεν δηλώνεται scroll τότε μπορεί να κινείται μόνο μπροστά EXEC SQL DECLARE cur_employee SCROLL CURSOR FOR Δρ. Κεραμόπουλος Ευκλείδης 35

NEXT PRIOR FIRST LAST ABSOLUTE no RELATIVE no FORWARD no BACKWARD no FETCH FORWARD 5 FROM NewRatingCursor INTO :Sailors_Sname, :Sailors_rating; Δρ. Κεραμόπουλος Ευκλείδης 36

Μετατρέπει τον δρομέα σε αδρανή Αλλιώς θα επέτρεπε αλλοίωση του πίνακα από κάποια άλλη συναλλαγή Δρ. Κεραμόπουλος Ευκλείδης 37

ο Να παρουσιασθούν τα στοιχεία των (ΠΟΛΛΩΝ) προμηθευτών με αλφαβητική σειρά ως προς το όνομα. Δρ. Κεραμόπουλος Ευκλείδης 38

#include <stdio.h> #include <stdlib.h> #include <ctype.h> #include <string.h> #include <sqlca.h> EXEC SQL BEGIN DECLARE SECTION; char supp_id[5]; char supp_name[20]; long int supp_status; char supp_city[15]; char database[6]; char userid[9]; char passwd[19]; EXEC SQL END DECLARE SECTION; Δρ. Κεραμόπουλος Ευκλείδης 39

int main(int argc, char *argv[]) { if (argc == 4) { strcpy (database, argv[1]); strcpy (userid, argv[2]); strcpy (passwd, argv[3]); EXEC SQL CONNECT TO :database USER :userid USING :passwd; else { printf ("\nusage: prog1 [database] [userid] [passwd]\n\n"); return 1; if (sqlca.sqlcode!= 0 ){ printf("error during logon.\n"); exit(2); else { printf("log on successful. \n"); EXEC SQL WHENEVER SQLERROR goto error; EXEC SQL WHENEVER NOT FOUND goto done; Δρ. Κεραμόπουλος Ευκλείδης 40

EXEC SQL DECLARE cursor1 CURSOR FOR SELECT id,name,status,city FROM supplier ORDER BY name; EXEC SQL OPEN cursor1; Δρ. Κεραμόπουλος Ευκλείδης 41

for (;;) { strcpy(supp_id," "); strcpy(supp_name," "); strcpy(supp_city," "); supp_status = 0; EXEC SQL FETCH cursor1 INTO :supp_id,:supp_name,:supp_status,:supp_city; printf("-------------------------------------\n"); printf("supplier ID: %s\n",supp_id); printf("name : %s\n",supp_name); printf("status : %ld\n",supp_status); printf("city : %s\n",supp_city); Δρ. Κεραμόπουλος Ευκλείδης 42

error: printf(" \n"); printf(" \n"); printf("sql error:%ld\n",sqlca.sqlcode); printf("\n%.70s\n",sqlca.sqlerrm.sqlerrmc); EXEC SQL DISCONNECT; done: printf("no more rows found\n"); EXEC SQL CLOSE cursor1; exit(0); EXEC SQL COMMIT WORK; EXEC SQL DISCONNECT; exit(0); Δρ. Κεραμόπουλος Ευκλείδης 43

Υπάρχουν περιπτώσεις όπου ένα σύστημα το οποίο πρέπει να έχει πρόσβαση σε ένα ΣΔΒΔ δημιουργεί διαφορετικό κώδικα ανάλογα με τις απαιτήσεις του χρήστη. Δύο είναι οι κύριες εντολές Prepare Execute Δρ. Κεραμόπουλος Ευκλείδης 44

ο Δημιουργία Πίνακα με Δυναμική SQL Δρ. Κεραμόπουλος Ευκλείδης 45

#include <stdio.h> #include <ctype.h> #include <stdlib.h> #include <string.h> #include <sqlca.h> EXEC SQL BEGIN DECLARE SECTION; char onebuffer[50]; char database[6]; char userid[9]; char passwd[19]; EXEC SQL END DECLARE SECTION; Δρ. Κεραμόπουλος Ευκλείδης 46

int main(int argc, char *argv[]) { char onestring[10]; int acounter; strcpy(onestring,""); strcpy(onebuffer,""); if (argc == 4) { strcpy (database, argv[1]); strcpy (userid, argv[2]); strcpy (passwd, argv[3]); EXEC SQL CONNECT TO :database USER :userid USING :passwd; else { printf ("\nusage: 5 [database] [userid] [passwd]\n\n"); return 1; /* endif */ if (sqlca.sqlcode!= 0 ){ printf("error during logon.\n"); exit(2); else { printf("log on successful. \n"); Δρ. Κεραμόπουλος Ευκλείδης 47

EXEC SQL WHENEVER SQLERROR GOTO error; printf("enter the name of the table you wish to create: "); scanf("%s",onestring); strcpy(onebuffer,"create TABLE "); strcat(onebuffer,onestring); strcat(onebuffer,"(child char(15), age integer)"); EXEC SQL EXECUTE IMMEDIATE :onebuffer; EXEC SQL COMMIT WORK; EXEC SQL DISCONNECT; exit(0); error: printf("sql error: %ld\n",sqlca.sqlcode); printf("\n%.70s\n",sqlca.sqlerrm.sqlerrmc); EXEC SQL ROLLBACK WORK; EXEC SQL DISCONNECT; exit(1); Δρ. Κεραμόπουλος Ευκλείδης 48

ο Εισαγωγή τιμών με δυναμική SQL Δρ. Κεραμόπουλος Ευκλείδης 49

#include <stdio.h> #include <stdlib.h> #include <ctype.h> #include <string.h> #include <sqlca.h> EXEC SQL BEGIN DECLARE SECTION; char onebuffer[70]; char child[15]; long int age; char database[6]; char userid[9]; char passwd[19]; EXEC SQL END DECLARE SECTION; Δρ. Κεραμόπουλος Ευκλείδης 50

int main(int argc, char *argv[]) { char onestring[10]; /* user states*/ int acounter; strcpy(onestring,""); strcpy(onebuffer,""); if (argc == 4) { strcpy (database, argv[1]); strcpy (userid, argv[2]); strcpy (passwd, argv[3]); EXEC SQL CONNECT TO :database USER :userid USING :passwd; else { printf ("\nusage: 6 [database] [userid] [passwd]\n\n"); return 1; if (sqlca.sqlcode!= 0 ){ printf("error during logon.\n"); exit(2); else { printf("log on successful. \n"); EXEC SQL WHENEVER SQLERROR GOTO error; Δρ. Κεραμόπουλος Ευκλείδης 51

printf("enter the name of the table you wish to append lines to: "); scanf("%s",onestring); strcpy(onebuffer,"insert INTO "); strcat(onebuffer,onestring); strcat(onebuffer,"(child, age) VALUES (?,?)"); EXEC SQL PREPARE s1 FROM :onebuffer; Δρ. Κεραμόπουλος Ευκλείδης 52

while (1){ for (acounter=0;acounter<15;acounter++){ if (acounter==0) strcpy(child," "); else strcat(child," "); printf("\nenter a child's name: "); scanf("%s",child); printf("\nenter the child's age: "); scanf("%ld",&age); if (age==0) { printf("\nprogram terminates!\n"); EXEC SQL COMMIT WORK; break; EXEC SQL EXECUTE s1 USING :child, :age; Δρ. Κεραμόπουλος Ευκλείδης 53

EXEC SQL COMMIT WORK; EXEC SQL DISCONNECT; exit(0); error: printf("sql error: %ld\n",sqlca.sqlcode); printf("\n%.70s\n",sqlca.sqlerrm.sqlerrmc); EXEC SQL ROLLBACK WORK; EXEC SQL DISCONNECT; exit(1); Δρ. Κεραμόπουλος Ευκλείδης 54

EXEC SQL PREPARE employee_statement FROM 'SELECT emp_lname FROM employee'; EXEC SQL DECLARE cur_employee CURSOR FOR employee_statement; Δρ. Κεραμόπουλος Ευκλείδης 55

επόμενη ενότητα