10.10.2013 Aufrufe

folien zur zweiten einheit (sql - ddl) - Universität Wien

folien zur zweiten einheit (sql - ddl) - Universität Wien

folien zur zweiten einheit (sql - ddl) - Universität Wien

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

IT/ISK: Informationssysteme und<br />

künstliche Intelligenz<br />

- Übungs<strong>einheit</strong> 2 -<br />

WS 2006/2007<br />

<strong>Universität</strong> <strong>Wien</strong><br />

Fakultät für Informatik<br />

Institut für Knowledge and Business Engineering<br />

www. .univie.ac.at<br />

http://www.dke.univie.ac.at Hans-Georg Fill, Wolfgang Kaghofer


SQL (DDL)<br />

• Anlegen von Tabellen<br />

• Primärschlüsseldefinition<br />

• Fremdschlüsseldefinition<br />

Inhalt<br />

• Arbeiten mit Sequences und Trigger<br />

• automatisches Löschen von Datensätzen<br />

• Tabellendefinitionen ändern<br />

• Datentyp DATE<br />

http://www.dke.univie.ac.at Hans-Georg Fill, Wolfgang Kaghofer


• ER-Modell<br />

Mitarbeiternummer<br />

Name<br />

Relationenschemata:<br />

Ausgangspunkt<br />

arbeitet in<br />

Mitarbeiter<br />

n 1<br />

Abteilung<br />

Menge<br />

Mitarbeiter (Mitarbeiternummer, Name, Abteilungsnummer)<br />

Abteilung (Abteilungsnummer, Bezeichnung)<br />

Produkte (Produktnummer, Name)<br />

produziert (Abteilungsnummer, Produktnummer, Menge)<br />

Produkt<br />

produziert<br />

http://www.dke.univie.ac.at Hans-Georg Fill, Wolfgang Kaghofer<br />

m<br />

n<br />

Abteilungsnummer<br />

Bezeichnung<br />

Produktnummer<br />

Name


SQL – DDL und DML<br />

SQL: Structured Query Language<br />

Befehle zum Definieren von Tabellen, Trigger, Constraints<br />

=> DDL (Data Definition Language)<br />

Befehle zum Einfügen, Abfragen und Verändern<br />

von Tabelleninhalten<br />

=> DML (Data Manipulation Language)<br />

Befehle durch ; abgeschlossen<br />

http://www.dke.univie.ac.at Hans-Georg Fill, Wolfgang Kaghofer


CREATE TABLE<br />

• “einfacher Fall”: aus Relationenschema<br />

Tabellenname, Spaltennamen, Schlüsselinformation<br />

– CREATE TABLE abteilung<br />

(abtnr NUMBER(10,0) PRIMARY KEY,<br />

bezeichnung VARCHAR2(30));<br />

• Problem: woher weiß ich beim Einfügen neuer<br />

Datensätze, welche Abteilungsnummer noch nicht<br />

vergeben ist?<br />

• Lösung: Verwendung von Sequences und Triggern<br />

http://www.dke.univie.ac.at Hans-Georg Fill, Wolfgang Kaghofer


Sequence<br />

• generiert automatisch eindeutige numerische Schlüssel<br />

– CREATE SEQUENCE s_abtnr<br />

INCREMENT BY 1<br />

START WITH 1;<br />

• Zugriff auf aktuellen Wert der Sequenz:<br />

– s_abntr.CURRVAL<br />

• Inkrementieren der Sequenz um den vordefinierten Wert:<br />

– s_abtnr.NEXTVAL<br />

http://www.dke.univie.ac.at Hans-Georg Fill, Wolfgang Kaghofer


Trigger<br />

• damit nun automatisch beim Einfügen neuer Datensätze<br />

in die Tabelle Abteilung eine bisher unbenutzte<br />

Abteilungsnummer vergeben wird, muss ein Trigger-<br />

Mechanismus implementiert werden<br />

– CREATE OR REPLACE TRIGGER trigger_abteilung<br />

BEFORE INSERT ON abteilung FOR EACH ROW<br />

DECLARE<br />

abteilungseq abteilung.abtnr%type;<br />

BEGIN<br />

SELECT s_abtnr.nextval INTO abteilungseq FROM DUAL;<br />

:new.abtnr := abteilungseq;<br />

END;<br />

/<br />

http://www.dke.univie.ac.at Hans-Georg Fill, Wolfgang Kaghofer


Einfügen von Datensätzen<br />

• Befehl INSERT INTO: konkrete Werte angeben<br />

• wenn Trigger verwendet werden, ist es natürlich ratsam,<br />

die entsprechenden Attribute nicht „händisch“ einzugeben<br />

das insert-Statement sollte nur die notwendigen<br />

Attributwerte beinhalten.<br />

– INSERT INTO abteilung (bezeichnung) VALUES<br />

(`Buchhaltung´);<br />

=> die Abteilungsnummer wird automatisch vergeben<br />

http://www.dke.univie.ac.at Hans-Georg Fill, Wolfgang Kaghofer


Fremdschlüssel<br />

• Fremdschlüssel werden mit Hilfe einer Column-Constraint<br />

definiert<br />

Beispiel: ein Mitarbeiter arbeitet in einer bestimmten<br />

Abteilung<br />

– CREATE TABLE mitarbeiter<br />

(mnr NUMBER(10,0) PRIMARY KEY,<br />

name VARCHAR2(20),<br />

abtnr NUMBER(10,0) REFERENCES abteilung(abtnr));<br />

http://www.dke.univie.ac.at Hans-Georg Fill, Wolfgang Kaghofer


Automatisches Löschen<br />

• manchmal kann es sinnvoll sein, dass Datensätze, die<br />

einen Fremdschlüssel beinhalten, gelöscht werden, wenn<br />

das referenzierte Tupel wird<br />

Beispiel: wenn etwa eine Abteilung aufgelöst wird und die dort<br />

arbeitenden Mitarbeiter gekündigt werden, ist es vorteilhaft, wenn<br />

nach dem Löschen der Abteilung die entsprechenden<br />

Mitarbeitertupel automatisch mitgelöscht werden<br />

• Realisierung mittels Erweiterung der Fremdschlüssel<br />

Column-Constraint um „on delete cascade“<br />

– abtnr NUMBER(10,0) REFERENCES abteilung(abtnr) on<br />

delete cascade<br />

http://www.dke.univie.ac.at Hans-Georg Fill, Wolfgang Kaghofer


Zusammengesetzte Schlüssel<br />

• Realisierung mittels Table-Constraints<br />

– CREATE TABLE produziert<br />

(abtnr NUMBER(10,0) REFERENCES abteilung(abtnr),<br />

prodnr NUMBER(10,0) REFERENCES produkte(prodnr),<br />

menge NUMBER(*,0),<br />

PRIMARY KEY (abtnr, prodnr));<br />

http://www.dke.univie.ac.at Hans-Georg Fill, Wolfgang Kaghofer


ALTER TABLE (1)<br />

• Möglichkeiten den Aufbau einer Tabelle nachträglich zu<br />

ändern:<br />

– Spalten hinzufügen/entfernen<br />

– Attributdatentyp ändern<br />

– Constraints hinzufügen/löschen bzw. (de)aktivieren<br />

http://www.dke.univie.ac.at Hans-Georg Fill, Wolfgang Kaghofer


ALTER TABLE (2)<br />

• Spalten hinzufügen<br />

– ALTER TABLE mitarbeiter<br />

ADD (gehalt number(7,0));<br />

• Spalten löschen<br />

– ALTER TABLE mitarbeiter<br />

DROP (gehalt);<br />

• Attributdatentyp ändern (kann nur durchgeführt werden,<br />

wenn alle Werte der entsprechenden Spalte NULL sind!)<br />

– ALTER TABLE mitarbeiter<br />

MODIFY (gehalt number(10,0));<br />

http://www.dke.univie.ac.at Hans-Georg Fill, Wolfgang Kaghofer


ALTER TABLE (3)<br />

• Constraint hinzufügen<br />

– ALTER TABLE mitarbeiter<br />

ADD (CONSTRAINT obergrenze check (gehalt


Datentyp DATE<br />

• der Datentyp DATE beinhaltet sowohl eine<br />

Datumsangabe als auch eine Zeitangabe<br />

• Standardformat:<br />

– DD-MMM-YY z.B. 24-Oct-03<br />

– HH:MI:SS a.m. (oder p.m.) z.B. 09:57:00 a.m.<br />

• es existiert in Oracle kein vordefinierter Datentyp, der nur<br />

eine Zeitangabe darstellt<br />

http://www.dke.univie.ac.at Hans-Georg Fill, Wolfgang Kaghofer


DATE – andere Formate<br />

• möchte man ein eigenes Datumsformat verwenden, so<br />

muss man die Funktion to_date() verwenden<br />

• Einfügen von Datensätzen<br />

– INSERT INTO table_name (datum) VALUES<br />

(to_date(´24.10.2003 09:57´, ´dd.mm.yyyy<br />

hh24:mi´));<br />

• Auslesen von Datensätzen und Anzeige in<br />

benutzerdefinierten Format<br />

– SELECT to_char (datum, ´dd.mm.yyyy hh24:mi´) FROM<br />

table_name [WHERE …];<br />

http://www.dke.univie.ac.at Hans-Georg Fill, Wolfgang Kaghofer


DATE – Format ändern<br />

• für die Dauer einer Session kann das Format geändert<br />

werden<br />

– ALTER SESSION SET nls_date_format = ´DD.MM.YYYY<br />

HH24:MI´;<br />

• beim nächsten Einloggen ist allerdings wieder das<br />

Standardformat gültig<br />

• um dauerndes händisches Eingeben zu vermeiden könnte<br />

daher ein Skript verwendet werden<br />

http://www.dke.univie.ac.at Hans-Georg Fill, Wolfgang Kaghofer


Oracle Skript-Funktionalität<br />

• eine einfache Möglichkeit, eine Menge von Anweisungen<br />

automatisch ausführen zu lassen:<br />

– man erzeugt ein Textfile mit allen gewünschten (und syntaktisch<br />

richtigen) Statements;<br />

am Ende des Files sollte / alleine in einer Zeile stehen<br />

– dieses File erhält die Endung „.<strong>sql</strong>“<br />

– dieses File legt man dann am Rechner ab, auf dem man mit der<br />

Oracle-Datenbank arbeitet (in unserem Fall auf<br />

almighty.pri.univie.ac.at)<br />

– Aufrufmöglichkeiten:<br />

• in der Oracle Konsole: <strong>sql</strong>> @filename<br />

• beim Starten mit: <strong>sql</strong>plus @filename<br />

http://www.dke.univie.ac.at Hans-Georg Fill, Wolfgang Kaghofer


Nützliches (1)<br />

• alle Tabellen einer Datenbank anzeigen<br />

– SELECT TABLE_NAME FROM USER_TABLES;<br />

• Struktur einer Tabelle ausgeben<br />

– DESC tablename;<br />

• Löschen einer Tabelle inkl. aller Datensätze<br />

– DROP TABLE tablename [CASCADE Constraints];<br />

• Löschen aller Datensätze einer Tabelle<br />

– DELETE FROM tablename;<br />

http://www.dke.univie.ac.at Hans-Georg Fill, Wolfgang Kaghofer


Nützliches (2)<br />

• Constraints einer Tabelle anzeigen<br />

– SELECT constraint_name, constraint_type<br />

FROM user_constraints<br />

WHERE table_name=´MITARBEITER´;<br />

• Abfragen zu welcher Spalte einer Tabelle die Constraint<br />

gehört<br />

– SELECT constraint_name, column_name<br />

FROM user_cons_columns<br />

WHERE table_name=´MITARBEITER`;<br />

Hinweis: der table_name muss in Grossbuchstaben<br />

angegeben werden!<br />

http://www.dke.univie.ac.at Hans-Georg Fill, Wolfgang Kaghofer

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!