entwicklungsumgebung fur die labor¨ ubung¨€¦ · oracle datenbank auf uebung db-server auf...
Post on 30-Jun-2020
1 Views
Preview:
TRANSCRIPT
Entwicklungsumgebung fur die LaborubungVL Datenbanksysteme
Ingo Feinerer
Arbeitsbereich Datenbanken und Artificial IntelligenceInstitut fur Informationssysteme
Technische Universitat Wien
20.10.2008
Uebung Server
I UebungI Secure ShellI Oracle DatenbankI Editoren auf Uebung
Uebung
I Adresse: uebung.dbai.tuwien.ac.atI Zugriff:
I Von ”uberall“ her moglich (z.B. Ubungsraume, andereRechner im TU-Netz, zu Hause, in der Firma, etc.)
I ausschließlich mittels Secure Shell (egal von wo aus)I Betriebssystem auf uebung: SUSE LinuxI Linux Kennung:
I Alle Ubungsteilnehmer erhalten nach der Anmeldung eineLinux Kennung mit Usernamen u<matrikelnummer>.
I Das Passwort entspricht dem Passwort imLVA-Betreuungssystem.
I Passwort andern: mit Linux-Befehl passwd. GeandertesPasswort nicht vergessen!
Secure ShellVon Windows-PC aus:
I ssh-Client (PuTTY) und scp-Client (PSCP):http://www.chiark.greenend.org.uk/
˜sgtatham/putty/download.html
I Liste von Alternativen: http://www.jfitz.com/tips/ssh_for_windows.html
Von Linux-PC aus:I ssh und scp sind ohnehin vorhandenI Bequemer Datentransfer: sftp mit Konquerer oder Nautilus
Einloggen auf Uebung bzw. File Transfer:
Beispiele
I ssh username@uebung.dbai.tuwien.ac.atI scp bsp1.sql
username@uebung.dbai.tuwien.ac.at:abgabe1.sql
Oracle Datenbank auf Uebung
DB-Server auf Uebung:I Oracle 10g EE (Enterprise Edition)
DB-Benutzung:I Alle LVA-Teilnehmer erhalten eine eigene DB-Kennung in
der DatenbankI DB-Username: gleich wie Linux-UsernameI DB-Passwort: am Anfang gleich wie Linux-PasswortI DB-Passwort andern: mit SQL*Plus-Befehl Password.
Geandertes Passwort nicht vergessen!I Starten einer interaktiven Session: mit dem Kommando
sqlplus (im ssh-Fenster). Mittels DB-Username undDB-Passwort in DB einloggen.
Editoren auf Uebung
I emacs: Hilfe im Web, z.B. http://www.cs.indiana.edu/˜chaynes/c311/s95/emacs-help.html
I vi: Hilfe im Web, z.B. http://math.la.asu.edu/vi_tutorial/vicontents.html
I pico: Hilfe im Web, z.B. http://www.uic.edu/depts/accc/software/pine/pico.html
I Alternativen: Entwicklung von SQL und PL/SQL auf demlokalen PC und Upload nach Uebung mittels scp (odersftp).
SQL*Plus Einfuhrung
I BildschirmausgabeI SQL BufferI SQL*Plus Datei-Befehle
BildschirmausgabeI Voraussetzung: SET SERVEROUTPUT ONI Package dbms output: Aufruf von PL/SQL aus:
Beispiele
dbms_output.put(’Hello World!’);dbms_output.new_line;dbms_output.put_line(’Hello World!’);
I Aufruf von SQL*Plus aus:
Beispiel
execute dbms_output.put_line(’Hello!’);
oder
BEGINdbms_output.put_line(’Hello!’);
END;/
BildschirmausgabeZeilen/Seiten-Große:(maximum linesize: 32767, maximum pagesize: 50000)
Beispiele
SET LINESIZE 100SET PAGESIZE 1000
Spaltenformatierung
Beispiel
COLUMN matrnr FORMAT 99999COLUMN name FORMAT A10 WRAPPEDCOLUMN semester FORMAT 99SELECT ∗ FROM Studenten
MATRNR NAME SEMESTER------ ---------- --------24002 Xenokrates 1827550 Schopenhau 6
er
SQL Buffer
I SQL*Plus speichert die Zeilen des letzten SQL Statementsin einem Buffer.
I Befehle zum Editieren der Buffer-ZeilenLIST Ausgabe aller Bufferzeilen3 Macht 3. Zeile zur aktuellenDEL Loscht die aktuelle ZeileAPPEND text text an aktuelle Zeile hangenCHANGE /old /new Ersetzt old durch newRUN (oder /) Ausfuhren des Statements
I Bemerkung: Bequemer ist das Arbeiten mit einem
”normalen“ Editor und Einlesen einer Datei mittels STARTBefehl.
SQL*Plus Datei-Befehle
I Wichtige SQL*Plus Befehle fur die Laborubung:
SPOOL datei Output wird in datei geschriebenSPOOL OFF Ende der Ausgabe in dateiSTART datei Fuhrt die Befehle aus datei aus
I Weitere Befehle:@ datei Abkurzung fur START dateiSAVE datei Speichert SQL Buffer in dateiEDIT Startet Editor zur Bufferbearbeitung
I Hilfe im Web: http://www.cs.rpi.edu/˜sibel/dbs/FALL2003/system_info/oracle/sqlplus_cmd.htm
Nutzliche Kommandos und Views
I KommandosI Views
Nutzliche Kommandos
Data Dictionary Information: DESCRIBE Befehl
Beispiele
DESCRIBE my tableDESCRIBE my viewDESCRIBE my package
Informationen uber den letzten Fehler (z.B. Kompilierfehler mitPL/SQL): SHOW ERRORS
Beispiele
SHOW ERRORS PROCEDURE ’ my procedure ’SHOW ERRORS FUNCTION ’ my funct ion ’
Nutzliche Views
I User ContstraintsI User ErrorsI User ObjectsI User ProceduresI User SequencesI User SourceI User TablesI User Tab ColumnsI User TriggersI User Views
Nutzliche Views: BeispieleUser Constraints:
Beispiel
DESCRIBE User Cons t ra in tsSELECT ∗ FROM User Cons t ra in ts WHERE
Table Name = ’VORLESUNGEN ’
Anmerkung: Tabellenname muss hier zwingend groß geschrieben werden.
User Tables, User Tab Columns:
Beispiel
SELECT Table Name FROM User TablesSELECT Column Name , Data Type , Data LengthFROM User Tab Columns WHERE Table Name = ’STUDENTEN ’
User Errors:
Beispiel
SELECT ∗ FROM User Errors
Nutzliche Views: BeispieleUser Objects:
Beispiel
SELECT DISTINCT o b j e c t t y p e FROM User ObjectsSELECT object name , s ta tus FROM User ObjectsWHERE o b j e c t t y p e = ’PROCEDURE ’
User Triggers:
Beispiel
SELECT t r igger name FROM User Tr iggers
User Source:
Beispiel
SELECT t e x t FROM User SourceWHERE name = ’MY TRIGGER ’ ORDER BY l i n e
Freie Oracle Tools
I Oracle 10g XEI Oracle SQL DeveloperI Oracle JDeveloper
Uberblick
Oracle 10g XE (Express Edition)I Download: http://www.oracle.com/technology/products/database/xe/
Oracle SQL DeveloperI Hat einen PL/SQL Source Code DebuggerI Download: http://www.oracle.com/technology/products/database/sql_developer/
Oracle JDeveloperI Hat eine Entwicklungsumgebung fur PL/SQL, Java und
viele weitere Sprachen.I Download: http://www.oracle.com/technology/software/products/jdev/
Oracle 10g XE
I Fur Linux und Windows erhaltlichI Funktionsumfang:
I Ahnlich wie die kommerziellen Versionen (zumindest wieSE1 und SE) von Oracle 10g, z.B.: SQL, PL/SQL, undJDBC
I Wesentliche Einschrankung: Ressourcen, z.B.: 4GBHarddisk, 1GB RAM, 1 CPU, Anzahl der DB-User, . . .
I Weitere Einschrankungen, z.B.: Tools, Performance Tuning,Backup/Recovery Optimierungen, . . .
I Zielgruppen:I PHP- und Java-Entwickler (Konkurrenz fur MySQL)I Universitaten, etc.
Oracle SQL Developer
I Plattformunabhangig: ist eine Java ApplikationI Features:
I GUI fur SQL und PL/SQL EntwicklungI Nutzlich fur Laborubung: PL/SQL Source Code Debugger
I Einrichten einer Verbindung:I Sowohl lokal (zu Oracle 10g XE auf dem eigenen PC) als
auch zu uebung moglichI Verbindungsparameter wie bei JDBC, z.B.:
hostname: localhostport: 1521SID: XE
Oracle JDeveloper
I Plattformunabhangig: ist eine Java ApplikationI Machtiges Tool mit Entwicklungsumgebung fur mehrere
Sprachen, z.B.:I PL/SQL (wie Oracle SQL Developer)I JavaI XML-Entwicklung (XML Schema, XSLT)I Web Service EntwicklungI Visueller Editor fur HTML, JSP, . . .
I Bemerkung: Fur die DB-Systeme Laborubung lohnt sichder Einarbeitungsaufwand vermutlich nicht.
Beispiel
I SQL StatementI PL/SQL Prozedur
SQL Statement
Beispiel
Suche die Namen jener Studenten, die alle 4-stundigenVorlesungen gehort haben.
I Ersetzung von ”for all“ durch ”exists“:Suche die Namen jener Studenten, fur die nicht gilt: Esgibt eine 4-stundige VO, fur die nicht gilt: der Student hatdiese VO gehort.
I Geschachteltes SQL-Statement erstellen: ”schrittweise“von innen nach außen.
SQL Statement
Innerstes SELECT:I Wahle MatrNr eines beliebigen Studenten sowie
Vorlesungsnummer einer beliebigen Vorlesung:
SELECT ∗ FROM hoeren ORDER BY Vor lNrSELECT MatrNr FROM studentenSELECT DISTINCT MatrNr FROM hoeren
z.B., wahle MatrNr 26120 und VorlNr 5001I SELECT Statement (in Datei test1.sql editieren):
SELECT ∗ FROM hoeren hWHERE h . Vor lNr = 5001 AND h . MatrNr = 26120
I Datei einlesen und ausfuhren in SQL*Plus:START test1.sql
SQL Statement
Mittleres SELECT:I Gesucht: Informationen uber alle 4-stundigen Vorlesungen,
die von einem bestimmten Studenten (z.B. wieder derStudent mit MatrNr 26120) nicht gehort wurden.
I SELECT Statement (in Datei test2.sql editieren):
SELECT ∗ FROM Vorlesungen vWHERE v .SWS = 4 AND NOT EXISTS
(SELECT ∗ FROM hoeren hWHERE h . Vor lNr = v . Vor lNrAND h . MatrNr = 26120)
I Datei einlesen und ausfuhren in SQL*Plus:START test2.sql
SQL Statement
Außeres SELECT:I Gesucht: Informationen uber Studenten, fur die es keine
4-stundigen Vorlesungen gibt, die von diesen Studentennicht gehort wurden.
I SELECT Statement (in Datei abgabe bsp1.sql editieren):
SELECT ∗ FROM Studenten sWHERE NOT EXISTS
(SELECT ∗ FROM Vorlesungen vWHERE v .SWS = 4 AND NOT EXISTS
(SELECT ∗ FROM hoeren hWHERE h . Vor lNr = v . Vor lNrAND h . MatrNr = s . MatrNr ) )
I Datei einlesen und ausfuhren in SQL*Plus:START abgabe bsp1.sql
SQL Statement
Bemerkung:Durch INSERTs und DELETEs die Testdaten so andern, dassdie Anfrage zumindest 2 bis 3 Tupel liefert, z.B. (vgl. Dateitest4.sql):
INSERT INTO hoeren VALUES (24002 ,4052)INSERT INTO hoeren VALUES (24002 ,4630)INSERT INTO hoeren VALUES (24002 ,5001)INSERT INTO hoeren VALUES (24002 ,5041)
PL/SQL Prozedur
I Gesucht: Prozedur, die den Namen und dieSemesteranzahl des Studenten mit den meistenSemestern ausgibt.
I Mogliche Vorgangsweise:I Entwicklung mittels ”normalem“ EditorI Am Anfang: nur Prozedur-Kopf und ”NULL“-BodyI
”Schrittweise“ den Body hinzufugenI Nach jedem Schritt kompilieren. Kompilierfehler mittels
SHOW ERRORS und User Errors View suchen.I
”Test-Treiber“ erstellenI Bildschirmausgaben mittels dbms output Paket zwecks
Fehlersuche
PL/SQL Prozedur
I Datei versuch1.sql:
CREATE OR REPLACE PROCEDURE p sem max( l name OUT VARCHAR2, l sem OUT NUMBER) ASBEGIN
NULL ;END ;/
I Einlesen und Kompilieren: START versuch1.sql
PL/SQL Prozedur
I Datei versuch2.sql:
CREATE OR REPLACE PROCEDURE p sem max( l name OUT VARCHAR2, l sem OUT NUMBER) ASCURSOR c s tuden t ISSELECT ∗ FROM Studenten s ;BEGIN
FOR rec s tuden t IN c s tuden t LOOPNULL ;
END LOOP;END ;/
I Einlesen und Kompilieren: START versuch2.sql
PL/SQL Prozedur
Datei versuch3.sql:
CREATE OR REPLACE PROCEDURE p sem max( l name OUT VARCHAR2, l sem OUT NUMBER) ASCURSOR c s tuden t ISSELECT ∗ FROM Studenten s ;BEGIN
FOR rec s tuden t IN c s tuden t LOOPIF l sem < c s tuden t . semester THEN
l sem := c s tuden t . semester ;l name := c s tuden t . name ;
END IF ;END LOOP;
END;/
PL/SQL Prozedur
I Oops, Kompilierfehler in Datei versuch3.sql:
SHOW ERRORSSELECT ∗ FROM User Er rors
Cursor im IF-Statement falsch verwendet!I Korrigierte Version von Datei versuch3.sql:
FOR rec s tuden t IN c s tuden t LOOPIF l sem < rec s tuden t . semester THEN
l sem := rec s tuden t . semester ;l name := rec s tuden t . name ;
END IF ;END LOOP;
PL/SQL Prozedur
I Test-Treiber in Datei versuch4.sql:
DECLAREname VARCHAR2 ( 3 0 ) ;semester NUMBER ( 2 ) ;
BEGINp sem max (name, semester ) ;dbms output . put ( ’name : ’ | | name | | ’ ’ ) ;dbms output . p u t l i n e ( ’ semester : ’ | | semester ) ;
END ;/
I Keine Bildschirmausgabe!SET SERVEROUTPUT ON
PL/SQL Prozedur
I Ergebnis offensichtlich falsch: name und semester sindNULL.
I Fehlersuche (Datei versuch5.sql) mittelsBildschirmausgaben:
dbms output . p u t l i n e ( ’ semester : ’ | | l sem ) ;FOR rec s tuden t IN c s tuden t LOOP
dbms output . p u t l i n e ( ’FOR−Sch le i f e ’ ) ;dbms output . p u t l i n e ( ’ rec s tuden t : ’ | |
rec s tuden t . semester ) ;IF l sem < rec s tuden t . semester THEN
dbms output . p u t l i n e ( ’ IF−Statement ’ ) ;l sem := rec s tuden t . semester ;. . .
END IF ;END LOOP;
PL/SQL Prozedur
Fehlererkennung:I l sem hat immer den Wert NULL.I Fehler: l sem wurde nicht initialisiert.
Fehlerkorrektur und letzter Test mit Datei versuch6.sql:
CREATE OR REPLACE PROCEDURE p sem max . . . ASCURSOR c s tuden t ISSELECT ∗ FROM Studenten s ORDER BY semester ASC;BEGIN
l sem := 0;FOR rec s tuden t IN c s tuden t LOOP
. . .END;
PL/SQL Prozedur
I Losung: Datei abgabe bsp2.sqlAusgabe-Kommandos aus der Prozedur entfernen.
I Bemerkung: Eigentlich hatte man dieses Problem miteinem einfachen SQL-Statement losen konnen (bei demman auch mehrere Tupel als Losung bekommen kann, fallsmehrere Studenten gleich lange studieren):
SELECT s .Name, s . SemesterFROM Studenten sWHERE s . Semester =
(SELECT MAX( s1 . Semester )FROM Studenten s1 )
top related