From 33613a85afc4b1481367fbe92a17ee59c240250b Mon Sep 17 00:00:00 2001 From: Sven Eisenhauer Date: Fri, 10 Nov 2023 15:11:48 +0100 Subject: add new repo --- Bachelor/Datenbanken 2/DB2SS05.pdf | Bin 0 -> 99573 bytes Bachelor/Datenbanken 2/DBIISoSe06.pdf | Bin 0 -> 161150 bytes Bachelor/Datenbanken 2/DBIISoSe06_K611.pdf | Bin 0 -> 236766 bytes Bachelor/Datenbanken 2/DBIISoSe06_K611_F5neu.pdf | Bin 0 -> 54435 bytes Bachelor/Datenbanken 2/DBIISoSe06_K62.pdf | Bin 0 -> 182436 bytes Bachelor/Datenbanken 2/DBIISoSe06_K63.pdf | Bin 0 -> 320436 bytes Bachelor/Datenbanken 2/DBIISoSe06_K63_Rest.pdf | Bin 0 -> 179434 bytes Bachelor/Datenbanken 2/DBIISoSe06_K7.pdf | Bin 0 -> 279199 bytes Bachelor/Datenbanken 2/DBIISoSe06_K7.zip | Bin 0 -> 257093 bytes .../Datenbanken 2/DBIISoSe06_K7_Hoersaaluebung.pdf | Bin 0 -> 86462 bytes Bachelor/Datenbanken 2/DBIISoSe06_K8.pdf | Bin 0 -> 250147 bytes Bachelor/Datenbanken 2/DBII_Praktikum1.pdf | Bin 0 -> 234564 bytes Bachelor/Datenbanken 2/MyJdbc.java | 124 +++++++++ Bachelor/Datenbanken 2/MyJdbc.zip | Bin 0 -> 192839 bytes Bachelor/Datenbanken 2/MyJdbcStatement.java | 141 +++++++++++ Bachelor/Datenbanken 2/ORDML.sql | 61 +++++ Bachelor/Datenbanken 2/ORTypes.sql | 119 +++++++++ Bachelor/Datenbanken 2/Praktikum1/create.sql | 38 +++ .../Datenbanken 2/Praktikum2/DBII_Praktikum2.pdf | Bin 0 -> 112368 bytes .../Datenbanken 2/Praktikum2/DBII_Praktikum2.zip | Bin 0 -> 297445 bytes .../Datenbanken 2/Praktikum2/DataArchitect.pdf | Bin 0 -> 88757 bytes .../Praktikum2/DisplayPreferences.pdf | Bin 0 -> 114792 bytes .../Datenbanken 2/Praktikum3/DBII_Praktikum3.pdf | Bin 0 -> 110825 bytes .../Datenbanken 2/Praktikum3/DBII_Praktikum3.zip | Bin 0 -> 108373 bytes Bachelor/Datenbanken 2/Praktikum3/bibcreate.sql | 279 +++++++++++++++++++++ .../Datenbanken 2/Praktikum3/bibcreatemysql.sql | 150 +++++++++++ Bachelor/Datenbanken 2/Praktikum3/bibdrop.sql | 89 +++++++ Bachelor/Datenbanken 2/Praktikum3/bibinsert.sql | 166 ++++++++++++ Bachelor/Datenbanken 2/Praktikum3/selects.sql | 130 ++++++++++ .../Datenbanken 2/Praktikum4/DBII_Praktikum4.pdf | Bin 0 -> 116329 bytes .../Datenbanken 2/Praktikum4/DBII_Praktikum4.zip | Bin 0 -> 284464 bytes Bachelor/Datenbanken 2/Praktikum4/DBII_plsql.pdf | Bin 0 -> 159958 bytes .../Praktikum4/assistenz_datenmodell.pdf | Bin 0 -> 22417 bytes .../Praktikum4/assistenz_function.sql | 50 ++++ .../Datenbanken 2/Praktikum4/assistenz_trigger.sql | 25 ++ Bachelor/Datenbanken 2/Praktikum4/esql1.sql | 36 +++ Bachelor/Datenbanken 2/Praktikum4/esql2.sql | 32 +++ Bachelor/Datenbanken 2/Praktikum4/esql3.sql | 32 +++ Bachelor/Datenbanken 2/Praktikum4/p1.sql | 30 +++ Bachelor/Datenbanken 2/Praktikum4/p1ins.sql | 8 + Bachelor/Datenbanken 2/Praktikum4/p1proc.sql | 19 ++ Bachelor/Datenbanken 2/Praktikum4/p1trigg.sql | 9 + Bachelor/Datenbanken 2/Praktikum4/readme.txt | 17 ++ .../Datenbanken 2/Praktikum4/sequenz_Oracle.sql | 38 +++ .../Datenbanken 2/Praktikum4/sequenz_Trigger.sql | 59 +++++ .../Datenbanken 2/Praktikum5/DBII_Praktikum5.pdf | Bin 0 -> 143675 bytes Bachelor/Datenbanken 2/Praktikum5/ORDML.sql | 61 +++++ Bachelor/Datenbanken 2/Praktikum5/ORDML_p5.sql | 82 ++++++ Bachelor/Datenbanken 2/Praktikum5/ORTypes.sql | 119 +++++++++ Bachelor/Datenbanken 2/Praktikum5/ORTypes_p5.sql | 65 +++++ Bachelor/Datenbanken 2/Praktikum5/db2prk5.jpg | Bin 0 -> 24153 bytes Bachelor/Datenbanken 2/Praktikum6/DB2P6.java | 132 ++++++++++ .../Datenbanken 2/Praktikum6/DBII_Praktikum6.pdf | Bin 0 -> 127419 bytes Bachelor/Datenbanken 2/Teil.java | 34 +++ Bachelor/Datenbanken 2/teile.mdb | Bin 0 -> 278528 bytes 55 files changed, 2145 insertions(+) create mode 100644 Bachelor/Datenbanken 2/DB2SS05.pdf create mode 100644 Bachelor/Datenbanken 2/DBIISoSe06.pdf create mode 100644 Bachelor/Datenbanken 2/DBIISoSe06_K611.pdf create mode 100644 Bachelor/Datenbanken 2/DBIISoSe06_K611_F5neu.pdf create mode 100644 Bachelor/Datenbanken 2/DBIISoSe06_K62.pdf create mode 100644 Bachelor/Datenbanken 2/DBIISoSe06_K63.pdf create mode 100644 Bachelor/Datenbanken 2/DBIISoSe06_K63_Rest.pdf create mode 100644 Bachelor/Datenbanken 2/DBIISoSe06_K7.pdf create mode 100644 Bachelor/Datenbanken 2/DBIISoSe06_K7.zip create mode 100644 Bachelor/Datenbanken 2/DBIISoSe06_K7_Hoersaaluebung.pdf create mode 100644 Bachelor/Datenbanken 2/DBIISoSe06_K8.pdf create mode 100644 Bachelor/Datenbanken 2/DBII_Praktikum1.pdf create mode 100644 Bachelor/Datenbanken 2/MyJdbc.java create mode 100644 Bachelor/Datenbanken 2/MyJdbc.zip create mode 100644 Bachelor/Datenbanken 2/MyJdbcStatement.java create mode 100644 Bachelor/Datenbanken 2/ORDML.sql create mode 100644 Bachelor/Datenbanken 2/ORTypes.sql create mode 100644 Bachelor/Datenbanken 2/Praktikum1/create.sql create mode 100644 Bachelor/Datenbanken 2/Praktikum2/DBII_Praktikum2.pdf create mode 100644 Bachelor/Datenbanken 2/Praktikum2/DBII_Praktikum2.zip create mode 100644 Bachelor/Datenbanken 2/Praktikum2/DataArchitect.pdf create mode 100644 Bachelor/Datenbanken 2/Praktikum2/DisplayPreferences.pdf create mode 100644 Bachelor/Datenbanken 2/Praktikum3/DBII_Praktikum3.pdf create mode 100644 Bachelor/Datenbanken 2/Praktikum3/DBII_Praktikum3.zip create mode 100644 Bachelor/Datenbanken 2/Praktikum3/bibcreate.sql create mode 100644 Bachelor/Datenbanken 2/Praktikum3/bibcreatemysql.sql create mode 100644 Bachelor/Datenbanken 2/Praktikum3/bibdrop.sql create mode 100644 Bachelor/Datenbanken 2/Praktikum3/bibinsert.sql create mode 100644 Bachelor/Datenbanken 2/Praktikum3/selects.sql create mode 100644 Bachelor/Datenbanken 2/Praktikum4/DBII_Praktikum4.pdf create mode 100644 Bachelor/Datenbanken 2/Praktikum4/DBII_Praktikum4.zip create mode 100644 Bachelor/Datenbanken 2/Praktikum4/DBII_plsql.pdf create mode 100644 Bachelor/Datenbanken 2/Praktikum4/assistenz_datenmodell.pdf create mode 100644 Bachelor/Datenbanken 2/Praktikum4/assistenz_function.sql create mode 100644 Bachelor/Datenbanken 2/Praktikum4/assistenz_trigger.sql create mode 100644 Bachelor/Datenbanken 2/Praktikum4/esql1.sql create mode 100644 Bachelor/Datenbanken 2/Praktikum4/esql2.sql create mode 100644 Bachelor/Datenbanken 2/Praktikum4/esql3.sql create mode 100644 Bachelor/Datenbanken 2/Praktikum4/p1.sql create mode 100644 Bachelor/Datenbanken 2/Praktikum4/p1ins.sql create mode 100644 Bachelor/Datenbanken 2/Praktikum4/p1proc.sql create mode 100644 Bachelor/Datenbanken 2/Praktikum4/p1trigg.sql create mode 100644 Bachelor/Datenbanken 2/Praktikum4/readme.txt create mode 100644 Bachelor/Datenbanken 2/Praktikum4/sequenz_Oracle.sql create mode 100644 Bachelor/Datenbanken 2/Praktikum4/sequenz_Trigger.sql create mode 100644 Bachelor/Datenbanken 2/Praktikum5/DBII_Praktikum5.pdf create mode 100644 Bachelor/Datenbanken 2/Praktikum5/ORDML.sql create mode 100644 Bachelor/Datenbanken 2/Praktikum5/ORDML_p5.sql create mode 100644 Bachelor/Datenbanken 2/Praktikum5/ORTypes.sql create mode 100644 Bachelor/Datenbanken 2/Praktikum5/ORTypes_p5.sql create mode 100644 Bachelor/Datenbanken 2/Praktikum5/db2prk5.jpg create mode 100644 Bachelor/Datenbanken 2/Praktikum6/DB2P6.java create mode 100644 Bachelor/Datenbanken 2/Praktikum6/DBII_Praktikum6.pdf create mode 100644 Bachelor/Datenbanken 2/Teil.java create mode 100644 Bachelor/Datenbanken 2/teile.mdb (limited to 'Bachelor/Datenbanken 2') diff --git a/Bachelor/Datenbanken 2/DB2SS05.pdf b/Bachelor/Datenbanken 2/DB2SS05.pdf new file mode 100644 index 0000000..f06640d Binary files /dev/null and b/Bachelor/Datenbanken 2/DB2SS05.pdf differ diff --git a/Bachelor/Datenbanken 2/DBIISoSe06.pdf b/Bachelor/Datenbanken 2/DBIISoSe06.pdf new file mode 100644 index 0000000..d4115bc Binary files /dev/null and b/Bachelor/Datenbanken 2/DBIISoSe06.pdf differ diff --git a/Bachelor/Datenbanken 2/DBIISoSe06_K611.pdf b/Bachelor/Datenbanken 2/DBIISoSe06_K611.pdf new file mode 100644 index 0000000..3435825 Binary files /dev/null and b/Bachelor/Datenbanken 2/DBIISoSe06_K611.pdf differ diff --git a/Bachelor/Datenbanken 2/DBIISoSe06_K611_F5neu.pdf b/Bachelor/Datenbanken 2/DBIISoSe06_K611_F5neu.pdf new file mode 100644 index 0000000..eb429ae Binary files /dev/null and b/Bachelor/Datenbanken 2/DBIISoSe06_K611_F5neu.pdf differ diff --git a/Bachelor/Datenbanken 2/DBIISoSe06_K62.pdf b/Bachelor/Datenbanken 2/DBIISoSe06_K62.pdf new file mode 100644 index 0000000..0326b65 Binary files /dev/null and b/Bachelor/Datenbanken 2/DBIISoSe06_K62.pdf differ diff --git a/Bachelor/Datenbanken 2/DBIISoSe06_K63.pdf b/Bachelor/Datenbanken 2/DBIISoSe06_K63.pdf new file mode 100644 index 0000000..f1e9684 Binary files /dev/null and b/Bachelor/Datenbanken 2/DBIISoSe06_K63.pdf differ diff --git a/Bachelor/Datenbanken 2/DBIISoSe06_K63_Rest.pdf b/Bachelor/Datenbanken 2/DBIISoSe06_K63_Rest.pdf new file mode 100644 index 0000000..6043beb Binary files /dev/null and b/Bachelor/Datenbanken 2/DBIISoSe06_K63_Rest.pdf differ diff --git a/Bachelor/Datenbanken 2/DBIISoSe06_K7.pdf b/Bachelor/Datenbanken 2/DBIISoSe06_K7.pdf new file mode 100644 index 0000000..12023b7 Binary files /dev/null and b/Bachelor/Datenbanken 2/DBIISoSe06_K7.pdf differ diff --git a/Bachelor/Datenbanken 2/DBIISoSe06_K7.zip b/Bachelor/Datenbanken 2/DBIISoSe06_K7.zip new file mode 100644 index 0000000..e06aae1 Binary files /dev/null and b/Bachelor/Datenbanken 2/DBIISoSe06_K7.zip differ diff --git a/Bachelor/Datenbanken 2/DBIISoSe06_K7_Hoersaaluebung.pdf b/Bachelor/Datenbanken 2/DBIISoSe06_K7_Hoersaaluebung.pdf new file mode 100644 index 0000000..f3ae95b Binary files /dev/null and b/Bachelor/Datenbanken 2/DBIISoSe06_K7_Hoersaaluebung.pdf differ diff --git a/Bachelor/Datenbanken 2/DBIISoSe06_K8.pdf b/Bachelor/Datenbanken 2/DBIISoSe06_K8.pdf new file mode 100644 index 0000000..e6a10ba Binary files /dev/null and b/Bachelor/Datenbanken 2/DBIISoSe06_K8.pdf differ diff --git a/Bachelor/Datenbanken 2/DBII_Praktikum1.pdf b/Bachelor/Datenbanken 2/DBII_Praktikum1.pdf new file mode 100644 index 0000000..c4db908 Binary files /dev/null and b/Bachelor/Datenbanken 2/DBII_Praktikum1.pdf differ diff --git a/Bachelor/Datenbanken 2/MyJdbc.java b/Bachelor/Datenbanken 2/MyJdbc.java new file mode 100644 index 0000000..373b2a6 --- /dev/null +++ b/Bachelor/Datenbanken 2/MyJdbc.java @@ -0,0 +1,124 @@ +package JDBC; + +import java.io.*; +import java.sql.*; +import java.util.*; + +public class MyJdbc { + + static private Connection con; + static private Statement stmt; + static private String query; + static private ResultSet rs; + + static Vector sListe = new Vector(); + static HashMap hm = new HashMap(); + + public static void main(String args[]) { + + // Teil-Tabelle lesen und Teil-Objekte instanziieren + getTeile(); + // Liste-Tabelle lesen und Referenzen implementieren + getReferences(); + // Komponentenstruktur anzeigen + showTeile(); + + } + + public static void getTeile() { + // Hilfsvariablen zum Aufbau der Teileobjekte + String s1, s2; + Teil t; + + // Treiber-Klasse suchen + String driverClass = + "sun.jdbc.odbc.JdbcOdbcDriver"; + try { + Class.forName(driverClass); + } + catch (ClassNotFoundException exc) { + System.out.println("c1: "+exc.getMessage()); + System.exit(1); + } + + Enumeration e = DriverManager.getDrivers(); + while (e.hasMoreElements()) + System.out.println(e.nextElement()); + + // Connection aufbauen + try { + String url = "jdbc:odbc:MyJdbc"; + con = DriverManager.getConnection(url); + } + catch (SQLException exc) { + System.out.println("c2: "+exc.getMessage()); + } + + // SLQ-Anweisungen ausführen + try { + stmt =con.createStatement(); + + // TEIL-Tabelle lesen + rs = stmt.executeQuery("Select * from TEIL"); + while (rs.next()) { + s1=rs.getString(2); + s2=rs.getString(1); + t = new Teil(s1,s2); + sListe.addElement(t); + // HashMap mit Key: (eind.) Teilenummer, Value: Objektref. füllen + hm.put(s1,t); + } + rs.close(); + + } + catch(SQLException exc) { + System.out.println("c3: "+exc.getMessage()); + } + + } + + public static void getReferences() { + String s1,s2; + Teil parent, child; + + // Parent-Objekt bestimmen + try { + // LISTE-Tabelle lesen + rs = stmt.executeQuery("Select * from LISTE"); + while (rs.next()) { + s1=rs.getString(2); + s2=rs.getString(1); + parent = (Teil)hm.get(s1); + child = (Teil)hm.get(s2); + parent.tC.addElement(child); + child.tP.addElement(parent); + } + rs.close(); + + } + catch(SQLException exc) { + System.out.println("c4: "+exc.getMessage()); + } + } + + public static void showTeile() { + Teil fahrrad; + fahrrad=(Teil)sListe.elementAt(0); + System.out.println("0.0:"+fahrrad); + getChildren(fahrrad,0); + } + + private static void getChildren(Teil t, int j) { + int i=1; + Teil hilf; + Enumeration anz; + anz = t.getChildren(); + while(anz.hasMoreElements()) { + hilf = (Teil)anz.nextElement(); + System.out.println(j+"."+i+":"+hilf); + getChildren(hilf,i); + i++; + } + } + +} diff --git a/Bachelor/Datenbanken 2/MyJdbc.zip b/Bachelor/Datenbanken 2/MyJdbc.zip new file mode 100644 index 0000000..b76e23f Binary files /dev/null and b/Bachelor/Datenbanken 2/MyJdbc.zip differ diff --git a/Bachelor/Datenbanken 2/MyJdbcStatement.java b/Bachelor/Datenbanken 2/MyJdbcStatement.java new file mode 100644 index 0000000..6f016f2 --- /dev/null +++ b/Bachelor/Datenbanken 2/MyJdbcStatement.java @@ -0,0 +1,141 @@ +package oraJdbc; + +import java.sql.*; +import java.util.*; + +/** + * @author schestag + * + * Diese Klasse enthält Beispiele für alle wichtigen Statement-Klassen + * der SQL-API auf der Datenbank flugdb des Teil I der Vorlesung + * sowie Beisiele für Objekte vom Typ ResultSetMetaData und DatabaseMetaData + */ +public class MyJdbcStatement { + + static private Connection con; + + static private Statement stmt; + static private String query; + static private PreparedStatement pStmt; + static private CallableStatement cStmt; + + static private ResultSet rs; + + public static void main(String args[]) + throws SQLException { + + // 1. Treiber-Klasse für JdbcOdbcDriver laden und registrieren + String driverClass = + "sun.jdbc.odbc.JdbcOdbcDriver"; + try { + Class.forName(driverClass); + } + catch (ClassNotFoundException exc) { + System.out.println("c1: "+exc.getMessage()); + System.exit(1); + } + + // Wieviele Elemente sind derzeit bei der Klasse DriverManager + // registriert? + Enumeration e = DriverManager.getDrivers(); + while (e.hasMoreElements()) + System.out.println("Beim DriverManager registriert: " + + e.nextElement() + "\n"); + + // 2. Connection aufbauen + try { + String url = "jdbc:odbc:MyORA9"; + con = DriverManager.getConnection(url,"ischestag","inge"); + System.out.println("Jetzt ist die Connection da"); + // Transaktionsmanagement: AutoCommit off + con.setAutoCommit(false); + // Isolationlevel setzen + con.setTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE); + con.commit(); + } + catch (SQLException exc) { + System.out.println("c2: "+exc.getMessage()); + } + + // Database Metadaten + try { + DatabaseMetaData dbm = con.getMetaData(); + ResultSet rsm = dbm.getTableTypes(); + while (rsm.next()) + System.out.println(rsm.getString(1)); + } catch(SQLException exc) { + System.out.println("c2a: "+exc.getMessage()); + } + + // 3. SLQ-Anweisungen ausführen + // Javavariablen zum Auslesen der Daten + int vPerNr, vPStd; + + try { + stmt =con.createStatement(); + + // PILOT-Tabelle lesen + rs = stmt.executeQuery("Select per_nr, p_std from pilot"); + while (rs.next()) { + vPerNr=rs.getInt(1); + vPStd =rs.getInt(2); + System.out.println("Ergebnis: " + vPerNr + " " + vPStd); + } + ResultSetMetaData rsm = rs.getMetaData(); + int anzCol = rsm.getColumnCount(); + for (int i=1; i<=anzCol; i++) { + String cn = rsm.getColumnName(i); + String ctn = rsm.getColumnTypeName(i); + System.out.println(cn + " " + ctn); + } + rs.close(); + } + catch(SQLException exc) { + System.out.println("c3: "+exc.getMessage()); + } + + // 4. PreparedStatement + try { + pStmt = con.prepareStatement("insert into flug values (?,?,?,?,?)"); + pStmt.setString(1,"LH-999"); + pStmt.setString(2,"Frankfurt"); + pStmt.setString(3,"Hamburg"); + pStmt.setDouble(4,0.5); + pStmt.setInt(5,400); + pStmt.executeUpdate(); + con.commit(); + } catch(SQLException exc) { + con.rollback(); + System.out.println("c4: "+exc.getMessage()); + } + + // 5. StoredProcedure-Aufruf (CallableStatement) + boolean type; + try { + cStmt = con.prepareCall("{call neugehalt(?,?)}"); + cStmt.setDouble(1, 1.01); + cStmt.setDouble(2, 1.02); + // Type == true <=> ResultSet, Type == fals <=> nur Updates + type = cStmt.execute(); + con.commit(); + + while (true) { + System.out.println("so viele Updates: "+cStmt.getUpdateCount()); + type = cStmt.getMoreResults(); + if (cStmt.getUpdateCount() == -1) + break; + } + } catch(SQLException exc) { + con.rollback(); + System.out.println("c5: "+exc.getMessage()); + } + + // 6. Connection schliessen + try { + con.close(); + } + catch(SQLException exc) { + System.out.println("close connection: "+exc.getMessage()); + } + } +} diff --git a/Bachelor/Datenbanken 2/ORDML.sql b/Bachelor/Datenbanken 2/ORDML.sql new file mode 100644 index 0000000..20a685b --- /dev/null +++ b/Bachelor/Datenbanken 2/ORDML.sql @@ -0,0 +1,61 @@ +/* Dieses Skript enthält alle INSERTS und UPDATES + zum Anlegen zweier Kunden und zweier Aufträge, + die sich gegenseitig referenzieren (Bsp. Kapitel 7). + Basis hierfür sind die Types aus dem Skript + ORTypes.sql +*/ +-- Kunde 1 (ohne Auftragsreferenzen) +INSERT INTO T_Kunde (KNr,Name,Adresse,Telefon,Kontakt) +VALUES (10,'Schmidt', + Typ_Adresse(64295,'DA','X-Str.','45'), + Typ_Telefon('111','222',NULL), + Typ_Kontakt('Kontaktmann 5','Kontaktmann 6') + ); + +-- Kunde 2 (ohne Auftragsreferenzen) +INSERT INTO T_Kunde (KNr,Name,Adresse,Telefon,Kontakt) +VALUES (20,'Huber', + Typ_Adresse(60433,'FFM','Y-Str.','56'), + Typ_Telefon('333','NULL',NULL), + Typ_Kontakt('Person 1','Person 2','Person 3') + ); + +-- Auftrag 1 (ohne Kundenreferenz) +INSERT INTO T_Auftrag (ANr,Eingang,Bearb) +VALUES (101,'24.05.2005','24.05.2005'); + +-- Auftrag 2 (ohne Kundenreferenz) +INSERT INTO T_Auftrag (ANr,Eingang,Bearb) +VALUES (102,'31.05.2005','31.05.2005'); + +-- Kundenreferenzen in Auftragsobjekte eintragen +UPDATE T_Auftrag a +SET a.RefKunde = (SELECT REF(k) + FROM T_Kunde k + WHERE k.KNr = 10) +WHERE a.Anr = 101; + +UPDATE T_Auftrag a +SET a.RefKunde = (SELECT REF(k) + FROM T_Kunde k + WHERE k.KNr = 20) +WHERE a.Anr = 102; + +-- Tabelle der Auftragsreferenzen in Kundenobjekte eintragen +UPDATE T_Kunde k +SET k.RefAuftrag = CAST(MULTISET + (SELECT REF(a) + FROM T_Auftrag a + WHERE a.RefKunde.knr = 10) AS Typ_Auftragtab) +WHERE k.knr = 10; + +UPDATE T_Kunde k +SET k.RefAuftrag = CAST(MULTISET + (SELECT REF(a) + FROM T_Auftrag a + WHERE a.RefKunde.knr = 20) AS Typ_Auftragtab) +WHERE k.knr = 20; + +-- Verwendung der Methode Last_Bestellung als Spaltenfunktion +select k.KNr, k.Last_Bestellung() +from T_Kunde k; diff --git a/Bachelor/Datenbanken 2/ORTypes.sql b/Bachelor/Datenbanken 2/ORTypes.sql new file mode 100644 index 0000000..bef07fc --- /dev/null +++ b/Bachelor/Datenbanken 2/ORTypes.sql @@ -0,0 +1,119 @@ +/* Dieses Skript enthält alle Deklarationen der Types + zum Vorlesungsbeispiel, Kapitel 7, sowie die + Deklarationen der beiden Tabellen T_Kunde und + T_Auftrag und des Methodenrumpfes der Methode + Last_Bestellung() +*/ + +-- Die Generierung der Types ************************* +CREATE TYPE Typ_Adresse +AS OBJECT +( plz NUMBER(5), + ort VARCHAR2(20), + strasse VARCHAR2(20), + hausnr VARCHAR2(5) +); +/ + +CREATE TYPE Typ_Kontakt +AS TABLE + OF VARCHAR2(20); +/ + +CREATE TYPE Typ_Telefon +AS VARRAY(3) + OF VARCHAR2(20); +/ + +-- Vorwärtsdeklaration Typ_Auftrag +CREATE TYPE Typ_Auftrag; +/ + +CREATE TYPE Typ_AuftragTab AS TABLE +OF REF Typ_Auftrag; +/ + +-- typ_kunde mit Methode + +-- Auftragsreferenzen +CREATE TYPE Typ_Kunde +AS OBJECT ( + KNr INTEGER, + Name VARCHAR2(20), + Adresse Typ_Adresse, + Telefon Typ_Telefon, + Kontakt Typ_Kontakt, + RefAuftrag Typ_AuftragTab, + MEMBER FUNCTION Last_Bestellung + RETURN date +); +/ + +CREATE TYPE Typ_Auftrag +AS OBJECT ( + ANr INTEGER, + Eingang DATE, + Bearb DATE, + RefKunde REF Typ_Kunde +); +/ +-- Methodenrumpf zur Methode Last_Bestellung +/* - Der Methodenrumpf arbeitet ausschliesslich mit + Attributen des Types Typ_Kunde, die Deklaration + ist also insbesondere unabhängig von der Deklaration + der Tabelle T_Kunde (und erst recht von der Deklaration + der Tabelle T_Auftrag) + - Die Ermittlung des maximalen Eingangsdatums erfordert + ausschliesslich ein Lesen der Einträge in der nested + table RefAuftrag des aktuellen Kundenobjektes self. +*/ +CREATE OR REPLACE TYPE BODY Typ_Kunde AS + MEMBER FUNCTION Last_Bestellung + RETURN date is + lastdate date; + BEGIN + SELECT MAX(a.column_value.Eingang) INTO lastdate + FROM table(self.RefAuftrag) a; + RETURN lastdate; + END; + END; +/ + +-- Die Generierung der beiden Tabellen ******************* +CREATE TABLE T_Auftrag +OF Typ_Auftrag ( + ANr primary key); + +CREATE TABLE T_Kunde +OF Typ_Kunde( + KNr primary key) +NESTED TABLE Kontakt + STORE AS Kunde_Kontakt_Liste, +NESTED TABLE RefAuftrag + STORE AS Kunde_Auftrag_Liste; + +/* Objekte, die als Instanzen dieser beiden + Tabellen verwaltet werden, sind Objekt-ADTs + und können über OIDs referenziert werden, + Objekte, die nur als Wert eines anderen + Objektes auftauchen, wie z.B. die Adress-Objekte + in den Kunden-Objekten, sind Werte-ADTs +*/ + + + + + + + + + + + + + + + + + + + diff --git a/Bachelor/Datenbanken 2/Praktikum1/create.sql b/Bachelor/Datenbanken 2/Praktikum1/create.sql new file mode 100644 index 0000000..f04288c --- /dev/null +++ b/Bachelor/Datenbanken 2/Praktikum1/create.sql @@ -0,0 +1,38 @@ +DROP DATABASE IF EXISTS OPPlanung; +CREATE DATABASE OPPlanung; +USE OPPlanung; + +CREATE TABLE `OPPlanung`.`Chirurg` ( + `PersNr` CHAR(8) NOT NULL DEFAULT '', + `Name` VARCHAR(20) NOT NULL DEFAULT '', + PRIMARY KEY(`PersNr`) +) +ENGINE = InnoDB; + +CREATE TABLE `OPPlanung`.`Operation` ( + `OPNr` CHAR(8) NOT NULL DEFAULT '', + `OPDatum` DATE NOT NULL DEFAULT 0, + `Anfang` TIME NOT NULL DEFAULT 0, + `PersNr` CHAR(8) NOT NULL DEFAULT '', + PRIMARY KEY(`OPNr`), + CONSTRAINT `leiter` FOREIGN KEY `leiter` (`PersNr`) + REFERENCES Chirurg (`PersNr`) + ON DELETE RESTRICT + ON UPDATE RESTRICT + ) ENGINE = InnoDB; + +CREATE TABLE `OPPlanung`.`Assistenz` ( + `PersNr` CHAR(8) NOT NULL DEFAULT '', + `OPNr` CHAR(8) NOT NULL DEFAULT '', + `Rolle` VARCHAR(20) NOT NULL DEFAULT '', + PRIMARY KEY(`PersNr`, `OPNr`), + CONSTRAINT `assi-pers` FOREIGN KEY `assi-pers` (`PersNr`) + REFERENCES `Chirurg` (`PersNr`) + ON DELETE RESTRICT + ON UPDATE RESTRICT, + CONSTRAINT `assi-op` FOREIGN KEY `assi-op` (`OPNr`) + REFERENCES `Operation` (`OPNr`) + ON DELETE RESTRICT + ON UPDATE RESTRICT +) +ENGINE = InnoDB; diff --git a/Bachelor/Datenbanken 2/Praktikum2/DBII_Praktikum2.pdf b/Bachelor/Datenbanken 2/Praktikum2/DBII_Praktikum2.pdf new file mode 100644 index 0000000..ca30f92 Binary files /dev/null and b/Bachelor/Datenbanken 2/Praktikum2/DBII_Praktikum2.pdf differ diff --git a/Bachelor/Datenbanken 2/Praktikum2/DBII_Praktikum2.zip b/Bachelor/Datenbanken 2/Praktikum2/DBII_Praktikum2.zip new file mode 100644 index 0000000..59c8bee Binary files /dev/null and b/Bachelor/Datenbanken 2/Praktikum2/DBII_Praktikum2.zip differ diff --git a/Bachelor/Datenbanken 2/Praktikum2/DataArchitect.pdf b/Bachelor/Datenbanken 2/Praktikum2/DataArchitect.pdf new file mode 100644 index 0000000..04ca748 Binary files /dev/null and b/Bachelor/Datenbanken 2/Praktikum2/DataArchitect.pdf differ diff --git a/Bachelor/Datenbanken 2/Praktikum2/DisplayPreferences.pdf b/Bachelor/Datenbanken 2/Praktikum2/DisplayPreferences.pdf new file mode 100644 index 0000000..3240271 Binary files /dev/null and b/Bachelor/Datenbanken 2/Praktikum2/DisplayPreferences.pdf differ diff --git a/Bachelor/Datenbanken 2/Praktikum3/DBII_Praktikum3.pdf b/Bachelor/Datenbanken 2/Praktikum3/DBII_Praktikum3.pdf new file mode 100644 index 0000000..2fe5afe Binary files /dev/null and b/Bachelor/Datenbanken 2/Praktikum3/DBII_Praktikum3.pdf differ diff --git a/Bachelor/Datenbanken 2/Praktikum3/DBII_Praktikum3.zip b/Bachelor/Datenbanken 2/Praktikum3/DBII_Praktikum3.zip new file mode 100644 index 0000000..9a2c053 Binary files /dev/null and b/Bachelor/Datenbanken 2/Praktikum3/DBII_Praktikum3.zip differ diff --git a/Bachelor/Datenbanken 2/Praktikum3/bibcreate.sql b/Bachelor/Datenbanken 2/Praktikum3/bibcreate.sql new file mode 100644 index 0000000..ef2ace1 --- /dev/null +++ b/Bachelor/Datenbanken 2/Praktikum3/bibcreate.sql @@ -0,0 +1,279 @@ +/*==============================================================*/ +/* Database name: CONCEPTUALDATAMODEL_1 */ +/* DBMS name: ORACLE Version 9i */ +/* Created on: 29.03.2006 09:46:49 */ +/*==============================================================*/ + + +alter table AUDIO + drop constraint FK_AUDIO_INHERITAN_LEIHOBJE +/ + + +alter table AUSLEIHE + drop constraint FK_AUSLEIHE_RELATIONS_LEIHOBJE +/ + + +alter table AUSLEIHE + drop constraint FK_AUSLEIHE_RELATIONS_ENTLEIHE +/ + + +alter table AUTOR_BUCH + drop constraint FK_AUTOR_BU_AUTOR_BUC_BUCH +/ + + +alter table AUTOR_BUCH + drop constraint FK_AUTOR_BU_AUTOR_BUC_AUTOR +/ + + +alter table BUCH + drop constraint FK_BUCH_INHERITAN_LEIHOBJE +/ + + +alter table ZEITSCHRIFT + drop constraint FK_ZEITSCHR_INHERITAN_LEIHOBJE +/ + + +drop index RELATIONSHIP_4_FK +/ + + +drop index RELATIONSHIP_5_FK +/ + + +drop index AUTOR_BUCH2_FK +/ + + +drop index AUTOR_BUCH_FK +/ + + +drop table AUDIO cascade constraints +/ + + +drop table AUSLEIHE cascade constraints +/ + + +drop table AUTOR cascade constraints +/ + + +drop table AUTOR_BUCH cascade constraints +/ + + +drop table BUCH cascade constraints +/ + + +drop table ENTLEIHER cascade constraints +/ + + +drop table LEIHOBJEKT cascade constraints +/ + + +drop table ZEITSCHRIFT cascade constraints +/ + + +/*==============================================================*/ +/* Table: AUDIO */ +/*==============================================================*/ + + +create table AUDIO ( + LEIHNR CHAR(10) not null, + KATEGORIE CHAR(2), + ATITEL VARCHAR2(30), + constraint PK_AUDIO primary key (LEIHNR) +) +/ + + +/*==============================================================*/ +/* Table: AUSLEIHE */ +/*==============================================================*/ + + +create table AUSLEIHE ( + LEIHNR CHAR(10) not null, + ENR CHAR(10) not null, + DATUM DATE not null, + BACKDATE DATE, + OVER INTEGER, + constraint PK_AUSLEIHE primary key (LEIHNR, ENR, DATUM) +) +/ + + +/*==============================================================*/ +/* Index: RELATIONSHIP_4_FK */ +/*==============================================================*/ +create index RELATIONSHIP_4_FK on AUSLEIHE ( + LEIHNR ASC +) +/ + + +/*==============================================================*/ +/* Index: RELATIONSHIP_5_FK */ +/*==============================================================*/ +create index RELATIONSHIP_5_FK on AUSLEIHE ( + ENR ASC +) +/ + + +/*==============================================================*/ +/* Table: AUTOR */ +/*==============================================================*/ + + +create table AUTOR ( + ACODE CHAR(7) not null, + ANAME VARCHAR2(20), + constraint PK_AUTOR primary key (ACODE) +) +/ + + +/*==============================================================*/ +/* Table: AUTOR_BUCH */ +/*==============================================================*/ + + +create table AUTOR_BUCH ( + LEIHNR CHAR(10) not null, + ACODE CHAR(7) not null, + constraint PK_AUTOR_BUCH primary key (LEIHNR, ACODE) +) +/ + + +/*==============================================================*/ +/* Index: AUTOR_BUCH_FK */ +/*==============================================================*/ +create index AUTOR_BUCH_FK on AUTOR_BUCH ( + LEIHNR ASC +) +/ + + +/*==============================================================*/ +/* Index: AUTOR_BUCH2_FK */ +/*==============================================================*/ +create index AUTOR_BUCH2_FK on AUTOR_BUCH ( + ACODE ASC +) +/ + + +/*==============================================================*/ +/* Table: BUCH */ +/*==============================================================*/ + + +create table BUCH ( + LEIHNR CHAR(10) not null, + ISBN CHAR(15), + BTITEL VARCHAR2(30), + ERSCHJAHR INTEGER, + constraint PK_BUCH primary key (LEIHNR) +) +/ + + +/*==============================================================*/ +/* Table: ENTLEIHER */ +/*==============================================================*/ + + +create table ENTLEIHER ( + ENR CHAR(10) not null, + ENAME VARCHAR2(20), + constraint PK_ENTLEIHER primary key (ENR) +) +/ + + +/*==============================================================*/ +/* Table: LEIHOBJEKT */ +/*==============================================================*/ + + +create table LEIHOBJEKT ( + LEIHNR CHAR(10) not null, + LEIHTYP CHAR(1) not null, + constraint PK_LEIHOBJEKT primary key (LEIHNR) +) +/ + + +/*==============================================================*/ +/* Table: ZEITSCHRIFT */ +/*==============================================================*/ + + +create table ZEITSCHRIFT ( + LEIHNR CHAR(10) not null, + JAHRGANG INTEGER, + ZTITEL VARCHAR2(30), + constraint PK_ZEITSCHRIFT primary key (LEIHNR) +) +/ + + +alter table AUDIO + add constraint FK_AUDIO_INHERITAN_LEIHOBJE foreign key (LEIHNR) + references LEIHOBJEKT (LEIHNR) +/ + + +alter table AUSLEIHE + add constraint FK_AUSLEIHE_RELATIONS_LEIHOBJE foreign key (LEIHNR) + references LEIHOBJEKT (LEIHNR) +/ + + +alter table AUSLEIHE + add constraint FK_AUSLEIHE_RELATIONS_ENTLEIHE foreign key (ENR) + references ENTLEIHER (ENR) +/ + + +alter table AUTOR_BUCH + add constraint FK_AUTOR_BU_AUTOR_BUC_BUCH foreign key (LEIHNR) + references BUCH (LEIHNR) +/ + + +alter table AUTOR_BUCH + add constraint FK_AUTOR_BU_AUTOR_BUC_AUTOR foreign key (ACODE) + references AUTOR (ACODE) +/ + + +alter table BUCH + add constraint FK_BUCH_INHERITAN_LEIHOBJE foreign key (LEIHNR) + references LEIHOBJEKT (LEIHNR) +/ + + +alter table ZEITSCHRIFT + add constraint FK_ZEITSCHR_INHERITAN_LEIHOBJE foreign key (LEIHNR) + references LEIHOBJEKT (LEIHNR) +/ + + diff --git a/Bachelor/Datenbanken 2/Praktikum3/bibcreatemysql.sql b/Bachelor/Datenbanken 2/Praktikum3/bibcreatemysql.sql new file mode 100644 index 0000000..73f11f5 --- /dev/null +++ b/Bachelor/Datenbanken 2/Praktikum3/bibcreatemysql.sql @@ -0,0 +1,150 @@ +/*==============================================================*/ +/* Database name: CONCEPTUALDATAMODEL_1 */ +/* DBMS name: MySQL 3.23 - noch ohne FK-Constraints! */ +/* Created on: 23.04.2006 20:43:53 */ +/*==============================================================*/ + + +drop index RELATIONSHIP_4_FK on AUSLEIHE; + +drop index RELATIONSHIP_5_FK on AUSLEIHE; + +drop index AUTOR_BUCH2_FK on AUTOR_BUCH; + +drop index AUTOR_BUCH_FK on AUTOR_BUCH; + +drop table if exists AUDIO; + +drop table if exists AUSLEIHE; + +drop table if exists AUTOR; + +drop table if exists AUTOR_BUCH; + +drop table if exists BUCH; + +drop table if exists ENTLEIHER; + +drop table if exists LEIHOBJEKT; + +drop table if exists ZEITSCHRIFT; + +/*==============================================================*/ +/* Table: AUDIO */ +/*==============================================================*/ +create table if not exists AUDIO +( + LEIHNR char(10) not null, + KATEGORIE char(2), + ATITEL varchar(30), + primary key (LEIHNR) +); + +/*==============================================================*/ +/* Table: AUSLEIHE */ +/*==============================================================*/ +create table if not exists AUSLEIHE +( + LEIHNR char(10) not null, + ENR char(10) not null, + DATUM date not null, + BACKDATE date, + OVER int, + primary key (LEIHNR, ENR, DATUM) +); + +/*==============================================================*/ +/* Index: RELATIONSHIP_4_FK */ +/*==============================================================*/ +create index RELATIONSHIP_4_FK on AUSLEIHE +( + LEIHNR +); + +/*==============================================================*/ +/* Index: RELATIONSHIP_5_FK */ +/*==============================================================*/ +create index RELATIONSHIP_5_FK on AUSLEIHE +( + ENR +); + +/*==============================================================*/ +/* Table: AUTOR */ +/*==============================================================*/ +create table if not exists AUTOR +( + ACODE char(7) not null, + ANAME varchar(20), + primary key (ACODE) +); + +/*==============================================================*/ +/* Table: AUTOR_BUCH */ +/*==============================================================*/ +create table if not exists AUTOR_BUCH +( + LEIHNR char(10) not null, + ACODE char(7) not null, + primary key (LEIHNR, ACODE) +); + +/*==============================================================*/ +/* Index: AUTOR_BUCH_FK */ +/*==============================================================*/ +create index AUTOR_BUCH_FK on AUTOR_BUCH +( + LEIHNR +); + +/*==============================================================*/ +/* Index: AUTOR_BUCH2_FK */ +/*==============================================================*/ +create index AUTOR_BUCH2_FK on AUTOR_BUCH +( + ACODE +); + +/*==============================================================*/ +/* Table: BUCH */ +/*==============================================================*/ +create table if not exists BUCH +( + LEIHNR char(10) not null, + ISBN char(15), + BTITEL varchar(30), + ERSCHJAHR int, + primary key (LEIHNR) +); + +/*==============================================================*/ +/* Table: ENTLEIHER */ +/*==============================================================*/ +create table if not exists ENTLEIHER +( + ENR char(10) not null, + ENAME varchar(20), + primary key (ENR) +); + +/*==============================================================*/ +/* Table: LEIHOBJEKT */ +/*==============================================================*/ +create table if not exists LEIHOBJEKT +( + LEIHNR char(10) not null, + LEIHTYP char(1) not null, + primary key (LEIHNR) +); + +/*==============================================================*/ +/* Table: ZEITSCHRIFT */ +/*==============================================================*/ +create table if not exists ZEITSCHRIFT +( + LEIHNR char(10) not null, + JAHRGANG int, + ZTITEL varchar(30), + primary key (LEIHNR) +); + diff --git a/Bachelor/Datenbanken 2/Praktikum3/bibdrop.sql b/Bachelor/Datenbanken 2/Praktikum3/bibdrop.sql new file mode 100644 index 0000000..38d6429 --- /dev/null +++ b/Bachelor/Datenbanken 2/Praktikum3/bibdrop.sql @@ -0,0 +1,89 @@ +/*==============================================================*/ +/* Database name: CONCEPTUALDATAMODEL_1 */ +/* DBMS name: ORACLE Version 9i */ +/* Created on: 29.03.2006 09:46:49 */ +/*==============================================================*/ + + +alter table AUDIO + drop constraint FK_AUDIO_INHERITAN_LEIHOBJE +/ + + +alter table AUSLEIHE + drop constraint FK_AUSLEIHE_RELATIONS_LEIHOBJE +/ + + +alter table AUSLEIHE + drop constraint FK_AUSLEIHE_RELATIONS_ENTLEIHE +/ + + +alter table AUTOR_BUCH + drop constraint FK_AUTOR_BU_AUTOR_BUC_BUCH +/ + + +alter table AUTOR_BUCH + drop constraint FK_AUTOR_BU_AUTOR_BUC_AUTOR +/ + + +alter table BUCH + drop constraint FK_BUCH_INHERITAN_LEIHOBJE +/ + + +alter table ZEITSCHRIFT + drop constraint FK_ZEITSCHR_INHERITAN_LEIHOBJE +/ + + +drop index RELATIONSHIP_4_FK +/ + + +drop index RELATIONSHIP_5_FK +/ + + +drop index AUTOR_BUCH2_FK +/ + + +drop index AUTOR_BUCH_FK +/ + + +drop table AUDIO cascade constraints +/ + + +drop table AUSLEIHE cascade constraints +/ + + +drop table AUTOR cascade constraints +/ + + +drop table AUTOR_BUCH cascade constraints +/ + + +drop table BUCH cascade constraints +/ + + +drop table ENTLEIHER cascade constraints +/ + + +drop table LEIHOBJEKT cascade constraints +/ + + +drop table ZEITSCHRIFT cascade constraints +/ + diff --git a/Bachelor/Datenbanken 2/Praktikum3/bibinsert.sql b/Bachelor/Datenbanken 2/Praktikum3/bibinsert.sql new file mode 100644 index 0000000..68e3cf8 --- /dev/null +++ b/Bachelor/Datenbanken 2/Praktikum3/bibinsert.sql @@ -0,0 +1,166 @@ +insert into entleiher values +('E0101','Jasmin Baumann'); +insert into entleiher values +('E0102','Jennifer Stock'); +insert into entleiher values +('E0103','Fabian Sack'); +insert into entleiher values +('E0104','Marcell Meier'); +insert into entleiher values +('E0105','Daniel Mueller'); +insert into entleiher values +('E0106','Caroline Meyer'); +insert into entleiher values +('E0107','Kathrin Mai'); +insert into entleiher values +('E0108','Michael Bauer'); + +insert into leihobjekt values +('L010','a'); +insert into leihobjekt values +('L011','b'); +insert into leihobjekt values +('L012','a'); +insert into leihobjekt values +('L013','b'); +insert into leihobjekt values +('L014','z'); +insert into leihobjekt values +('L015','z'); +insert into leihobjekt values +('L016','z'); +insert into leihobjekt values +('L017','b'); +insert into leihobjekt values +('L018','b'); +insert into leihobjekt values +('L019','b'); +insert into leihobjekt values +('L020','a'); +insert into leihobjekt values +('L021','a'); +insert into leihobjekt values +('L022','a'); +insert into leihobjekt values +('L023','b'); +insert into leihobjekt values +('L024','b'); +insert into leihobjekt values +('L025','b'); +insert into leihobjekt values +('L026','b'); +insert into leihobjekt values +('L027','b'); +insert into leihobjekt values +('L028','b'); + +insert into audio values +('L010','kl','Sonate A Dur'); +insert into audio values +('L012','ro','One night at the opera'); +insert into audio values +('L020','ro','Mensch'); +insert into audio values +('L021','ro','Just the best'); +insert into audio values +('L022','po','Bravo Hits'); + +insert into zeitschrift values +('L014',1999,'Focus'); +insert into zeitschrift values +('L015',2004,'Brigitte'); +insert into zeitschrift values +('L016',2005,'Stern'); + +insert into buch values +('L011','3-8218-1406-311','Mobby Dick',2001); +insert into buch values +('L013','9-7838-2353-223','Pippi Langstrumpf',1998); +insert into buch values +('L017','4-2546-2625-341','Kristall der Träuume',2000); +insert into buch values +('L018','3-2533-5862-134','Kochen fuer Anfaenger',2002); +insert into buch values +('L019','4-1235-3332-125','Backen leicht gemacht',2003); +insert into buch values +('L023','3-8218-1406-301','Studentenkueche',2004); +insert into buch values +('L024','9-7838-2233-223','Lockruf der Vergangenheit',2004); +insert into buch values +('L025','4-2116-2625-341','Bitteres Geheimnis',2001); +insert into buch values +('L026','3-2533-5876-134','Oliver Twist',2003); +insert into buch values +('L027','4-1235-1000-125','Das Weihnachtsgespenst',2001); +insert into buch values +('L028','3-8218-1578-351','Das Muffinkochbuch',2004); + +insert into autor values +('A0101','Astrid Lindgren'); +insert into autor values +('A0102','Charles Dickens'); +insert into autor values +('A0103','Annette Weiler'); +insert into autor values +('A0104','Barbara Wood'); + +insert into autor_buch values +('L013','A0101'); +insert into autor_buch values +('L011','A0102'); +insert into autor_buch values +('L018','A0103'); +insert into autor_buch values +('L019','A0103'); +insert into autor_buch values +('L017','A0104'); +insert into autor_buch values +('L024','A0104'); +insert into autor_buch values +('L025','A0104'); +insert into autor_buch values +('L026','A0102'); +insert into autor_buch values +('L027','A0102'); +insert into autor_buch values +('L023','A0103'); +insert into autor_buch values +('L028','A0103'); + +insert into ausleihe values +('L012','E0102','07.09.2005','02.11.2005',1); +insert into ausleihe values +('L028','E0103','12.11.2005','07.12.2005',0); +insert into ausleihe values +('L011','E0101','02.02.2006','02.03.2006',0); +insert into ausleihe values +('L012','E0101','03.01.2006','31.01.2006',1); +insert into ausleihe values +('L012','E0103','10.01.2006','08.02.2006',1); +insert into ausleihe values +('L013','E0103','10.01.2006','08.02.2006',1); +insert into ausleihe values +('L014','E0103','10.01.2006','08.02.2006',1); +insert into ausleihe values +('L015','E0104','03.02.2006','03.03.2006',0); +insert into ausleihe values +('L016','E0106','04.01.2006','01.02.2006',1); +insert into ausleihe values +('L017','E0107','05.01.2006','02.03.2006',1); +insert into ausleihe values +('L019','E0108','03.02.2006','03.03.2006',0); +insert into ausleihe values +('L020','E0108','03.02.2006','03.03.2006',0); +insert into ausleihe values +('L021','E0108','03.02.2006','03.03.2006',0); +insert into ausleihe values +('L024','E0108','03.02.2006','03.03.2006',0); +insert into ausleihe values +('L025','E0108','07.02.2006','07.03.2006',0); +insert into ausleihe values +('L026','E0108','07.02.2006','07.03.2006',0); +insert into ausleihe values +('L027','E0108','07.02.2006','07.03.2006',0); + + + diff --git a/Bachelor/Datenbanken 2/Praktikum3/selects.sql b/Bachelor/Datenbanken 2/Praktikum3/selects.sql new file mode 100644 index 0000000..9c4bf31 --- /dev/null +++ b/Bachelor/Datenbanken 2/Praktikum3/selects.sql @@ -0,0 +1,130 @@ +* DBII Praktikum 3 */ +/* ================ */ + +/* Aufgabe 1: */ +/* ---------- */ + +select ISBN, BTITEL from BUCH where LEIHNR in +(select LEIHNR from AUTOR_BUCH where ACODE in +(select ACODE from AUTOR where ANAME = 'Charles Dickens')); + +/* oder */ + +select ISBN,BTITEL from BUCH where LEIHNR in +(select ab.LEIHNR from Autor a, AUTOR_BUCH ab where a.ACODE = ab.ACODE and a.ANAME = 'Charles Dickens'); + +/* oder */ + +select b.ISBN,b.BTITEL +from Autor a, AUTOR_BUCH ab, BUCH b +where a.ACODE = ab.ACODE and ab.LEIHNR = b.LEIHNR and a.ANAME = 'Charles Dickens'; + + +/* Aufgabe 2: */ +/* ---------- */ + +select b.LEIHNR, b.ISBN, b.BTITEL, b.ERSCHJAHR +from Autor a, AUTOR_BUCH ab, BUCH b +where a.ACODE = ab.ACODE and ab.LEIHNR = b.LEIHNR and a.ANAME = 'Barbara Wood'; + + +select * from BUCH where LEIHNR in +(select LEIHNR from AUTOR_BUCH where ACODE in +(select ACODE from AUTOR where ANAME = 'Barbara Wood')); + + +/* Aufgabe 3: */ +/* ---------- */ + +select e.ENAME, a.DATUM, a.BACKDATE, a.OVER, o.LEIHTYP +from LEIHOBJEKT o, AUSLEIHE a, ENTLEIHER e +where o.LEIHNR = a.LEIHNR and a.ENR = e.ENR order by a.datum; + + +/* Aufgabe 4: */ +/* ---------- */ +SELECT e.ENAME, count(*) +FROM AUSLEIHE a, ENTLEIHER e +WHERE a.ENR = e.ENR and a.datum > '31.12.2005' +GROUP BY e.ENAME +having count(*) > 1 +order by count(*) desc; + + +/* Aufgabe 5: */ +/* ---------- */ +select b.BTITEL, b.ERSCHJAHR +from Autor a, AUTOR_BUCH ab, BUCH b +where a.ACODE = ab.ACODE and ab.LEIHNR = b.LEIHNR and a.ANAME = 'Annette Weiler' and b.ERSCHJAHR in +(select max(b.ERSCHJAHR) +from Autor a, AUTOR_BUCH ab, BUCH b +where a.ACODE = ab.ACODE and ab.LEIHNR = b.LEIHNR and a.ANAME = 'Annette Weiler'); + + +/* Aufgabe 6: */ +/* ---------- */ +select e.ENAME, a.DATUM, a.BACKDATE, a.OVER, o.LEIHTYP +from LEIHOBJEKT o, AUSLEIHE a, ENTLEIHER e +where o.LEIHNR = a.LEIHNR +and a.ENR = e.ENR +and ( o.LEIHTYP = 'a' or o.LEIHTYP ='z' ) +and (a.datum between '28.01.2006' and '05.02.2006'); + +/* Aufgabe 7: */ +/* ---------- */ +SELECT lo.leihnr LEIHNR, lo.leihtyp LEIHTYP, e.TITEL +from LEIHOBJEKT lo, +(SELECT z.leihnr NR,z.ztitel TITEL from ZEITSCHRIFT z +UNION +SELECT a.leihnr NR ,atitel TITEL from AUDIO a +UNION +SELECT b.leihnr NR, b.btitel TITEL FROM BUCH b) e +WHERE lo.leihnr=e.NR +ORDER BY LEIHTYP, e.TITEL; + +/* Aufgabe 8: */ +/* ---------- */ + +select e.ENAME, sum(a.OVER) * 2 +from AUSLEIHE a, ENTLEIHER e +where a.ENR = e.ENR +GROUP BY e.Ename +having sum(a.OVER) > 0; + +/* Aufgabe 9: */ +/* ---------- */ +select distinct a.acode,a.aname +from AUTOR a, autor_buch ab +WHERE a.acode=ab.acode and EXISTS (SELECT * + FROM ausleihe al + where ab.leihnr = al.leihnr); + +select a.acode,a.aname +from AUTOR a +WHERE EXISTS (SELECT * + FROM autor_buch ab, ausleihe al + where a.acode = ab.acode and ab.leihnr = al.leihnr); + + +/* Aufgabe 10: */ +/* ---------- */ +select b.leihnr, b.isbn from buch b +WHERE not EXISTS ( +SELECT * from ausleihe a where a.leihnr = b.leihnr); + +/* geht nicht */ + select * from buch + WHERE not EXISTS ( + SELECT * FROM BUCH Natural JOIN AUSLEIHE); + +/* Aufgabe 11: */ +/* ---------- */ + +select e.enr, e.ename from entleiher e +where exists (select * from ausleihe a where a.enr=e.enr + and a.over >0); +_______________________________________________________________ +SMS schreiben mit WEB.DE FreeMail - einfach, schnell und +kostenguenstig. Jetzt gleich testen! http://f.web.de/?mc=021192 + + diff --git a/Bachelor/Datenbanken 2/Praktikum4/DBII_Praktikum4.pdf b/Bachelor/Datenbanken 2/Praktikum4/DBII_Praktikum4.pdf new file mode 100644 index 0000000..0799a9e Binary files /dev/null and b/Bachelor/Datenbanken 2/Praktikum4/DBII_Praktikum4.pdf differ diff --git a/Bachelor/Datenbanken 2/Praktikum4/DBII_Praktikum4.zip b/Bachelor/Datenbanken 2/Praktikum4/DBII_Praktikum4.zip new file mode 100644 index 0000000..cf4b844 Binary files /dev/null and b/Bachelor/Datenbanken 2/Praktikum4/DBII_Praktikum4.zip differ diff --git a/Bachelor/Datenbanken 2/Praktikum4/DBII_plsql.pdf b/Bachelor/Datenbanken 2/Praktikum4/DBII_plsql.pdf new file mode 100644 index 0000000..334b6d9 Binary files /dev/null and b/Bachelor/Datenbanken 2/Praktikum4/DBII_plsql.pdf differ diff --git a/Bachelor/Datenbanken 2/Praktikum4/assistenz_datenmodell.pdf b/Bachelor/Datenbanken 2/Praktikum4/assistenz_datenmodell.pdf new file mode 100644 index 0000000..5fdbb28 Binary files /dev/null and b/Bachelor/Datenbanken 2/Praktikum4/assistenz_datenmodell.pdf differ diff --git a/Bachelor/Datenbanken 2/Praktikum4/assistenz_function.sql b/Bachelor/Datenbanken 2/Praktikum4/assistenz_function.sql new file mode 100644 index 0000000..150d0d4 --- /dev/null +++ b/Bachelor/Datenbanken 2/Praktikum4/assistenz_function.sql @@ -0,0 +1,50 @@ +-- Stored Function + +create or replace function pruef_operation(p_persnr integer, p_opnr integer) + return integer +as + v_persnr integer; + +begin + + select persnr into v_persnr + from operation + where opnr = p_opnr; + +if v_persnr = p_persnr +then return 0; +else return 1; +end if; + +end; +/ + + +-- Trigger + +create or replace trigger ASSISTENZ_INSERT +before insert on assistenz +for each row + +declare + Eingabe_nicht_zulaessig exception; + pragma exception_init (Eingabe_nicht_zulaessig, -20001); + + antwort integer; + +begin + + antwort := pruef_operation(:new.persnr,:new.opnummer); + + if antwort = 0 + then raise Eingabe_nicht_zulaessig; + end if; + + exception + when Eingabe_nicht_zulaessig then + raise_application_error + (-20001, 'Chirurg ' || :new.persnr || ' leitet diese Operation!'); + +end; +/ + diff --git a/Bachelor/Datenbanken 2/Praktikum4/assistenz_trigger.sql b/Bachelor/Datenbanken 2/Praktikum4/assistenz_trigger.sql new file mode 100644 index 0000000..d252b1c --- /dev/null +++ b/Bachelor/Datenbanken 2/Praktikum4/assistenz_trigger.sql @@ -0,0 +1,25 @@ +create or replace trigger ASSISTENZ_INSERT +before insert on assistenz +for each row + +declare + Eingabe_nicht_zulaessig exception; + pragma exception_init (Eingabe_nicht_zulaessig, -20001); + + antwort integer; + +begin + + antwort := pruef_operation(:new.persnr,:new.opnummer); + + if antwort = 0 + then raise Eingabe_nicht_zulaessig; + end if; + + exception + when Eingabe_nicht_zulaessig then + raise_application_error + (-20001, 'Chirurg ' || :new.persnr || ' leitet diese Operation!'); + +end; +/ diff --git a/Bachelor/Datenbanken 2/Praktikum4/esql1.sql b/Bachelor/Datenbanken 2/Praktikum4/esql1.sql new file mode 100644 index 0000000..b1d631a --- /dev/null +++ b/Bachelor/Datenbanken 2/Praktikum4/esql1.sql @@ -0,0 +1,36 @@ +-- Anonymer PL/SQL-Block + +-- Deklarationsblock +declare + cursor c is select gehalt from angestellter + for update of gehalt; + + v_gehalt angestellter.gehalt%type; + +-- Ausführungsblock +begin + -- Cursor öffnen + open c; + + -- erste Zeile lesen + fetch c into v_gehalt; + + -- alle Zeilen der Ergebnistabelle lesen + while c%found loop + + if v_gehalt > 10000 + then update angestellter + set gehalt = gehalt * 1.03 + where current of c; + else update angestellter + set gehalt = gehalt * 1.02 + where current of c; + end if; + + fetch c into v_gehalt; + + end loop; + +end; +/ + diff --git a/Bachelor/Datenbanken 2/Praktikum4/esql2.sql b/Bachelor/Datenbanken 2/Praktikum4/esql2.sql new file mode 100644 index 0000000..f821d5e --- /dev/null +++ b/Bachelor/Datenbanken 2/Praktikum4/esql2.sql @@ -0,0 +1,32 @@ +-- als stored procedure ohne explizites declare + +create or replace procedure neugehalt +as + cursor c is select gehalt + from angestellter + for update of gehalt; + + v_gehalt angestellter.gehalt%type; + +-- Ausführungsblock +begin + -- Cursor öffnen + open c; + + -- erste Zeile lesen + fetch c into v_gehalt; + + -- alle Zeilen der Ergebnistabelle lesen + while c%found loop + if v_gehalt > 10000 + then update angestellter set gehalt = gehalt * 1.03 + where current of c; + else update angestellter set gehalt = gehalt * 1.02 + where current of c; + end if; + fetch c into v_gehalt; + end loop; + +end; +/ + diff --git a/Bachelor/Datenbanken 2/Praktikum4/esql3.sql b/Bachelor/Datenbanken 2/Praktikum4/esql3.sql new file mode 100644 index 0000000..bd2d1aa --- /dev/null +++ b/Bachelor/Datenbanken 2/Praktikum4/esql3.sql @@ -0,0 +1,32 @@ +-- als stored procedure mit Parameteruebergabe + +create or replace procedure neugehalt(proz1 number, proz2 number) +as + cursor c is select gehalt + from angestellter + for update of gehalt; + + v_gehalt angestellter.gehalt%type; + +-- Ausführungsblock +begin + -- Cursor öffnen + open c; + + -- erste Zeile lesen + fetch c into v_gehalt; + + -- alle Zeilen der Ergebnistabelle lesen + while c%found loop + if v_gehalt > 10000 + then update angestellter set gehalt = gehalt * proz1 + where current of c; + else update angestellter set gehalt = gehalt * proz2 + where current of c; + end if; + fetch c into v_gehalt; + end loop; + +end; +/ + diff --git a/Bachelor/Datenbanken 2/Praktikum4/p1.sql b/Bachelor/Datenbanken 2/Praktikum4/p1.sql new file mode 100644 index 0000000..2d6b2a1 --- /dev/null +++ b/Bachelor/Datenbanken 2/Praktikum4/p1.sql @@ -0,0 +1,30 @@ +drop table position; +drop table produkt; +drop table rechnung; + +create table produkt +( pnr integer, + pbez varchar2(20), + preis number(8,2), + constraint is_PKprod primary key(pnr) +); + +create table rechnung +( rnr integer, + datum date, + pges number(8,2), + primary key(rnr) +); + +create table position +( rnr integer, + pnr integer, + menge integer, + primary key(rnr,pnr), + foreign key(rnr) references rechnung(rnr), + foreign key(pnr) references produkt(pnr) +); + + + + diff --git a/Bachelor/Datenbanken 2/Praktikum4/p1ins.sql b/Bachelor/Datenbanken 2/Praktikum4/p1ins.sql new file mode 100644 index 0000000..fca2ec7 --- /dev/null +++ b/Bachelor/Datenbanken 2/Praktikum4/p1ins.sql @@ -0,0 +1,8 @@ +insert into produkt +values(1,'Tisch',400.00); +insert into produkt +values(2,'Stuhl',80.00); +insert into produkt +values(3,'Schrank',2580.00); +insert into produkt +values(4,'Bett',1750.00); diff --git a/Bachelor/Datenbanken 2/Praktikum4/p1proc.sql b/Bachelor/Datenbanken 2/Praktikum4/p1proc.sql new file mode 100644 index 0000000..e1febad --- /dev/null +++ b/Bachelor/Datenbanken 2/Praktikum4/p1proc.sql @@ -0,0 +1,19 @@ +create or replace procedure +setpreis(r integer, p integer, m integer) +as + +vpreis produkt.preis%type; + +begin + +select preis into vpreis +from produkt +where pnr = p; + +update rechnung +set pges = pges + vpreis * m +where rnr = r; + +end; +/ + diff --git a/Bachelor/Datenbanken 2/Praktikum4/p1trigg.sql b/Bachelor/Datenbanken 2/Praktikum4/p1trigg.sql new file mode 100644 index 0000000..2af809e --- /dev/null +++ b/Bachelor/Datenbanken 2/Praktikum4/p1trigg.sql @@ -0,0 +1,9 @@ +create or replace trigger POSITION_AR_INSERT +after insert on position +for each row +begin + +setpreis(:new.rnr,:new.pnr,:new.menge); + +end; +/ diff --git a/Bachelor/Datenbanken 2/Praktikum4/readme.txt b/Bachelor/Datenbanken 2/Praktikum4/readme.txt new file mode 100644 index 0000000..9b433c0 --- /dev/null +++ b/Bachelor/Datenbanken 2/Praktikum4/readme.txt @@ -0,0 +1,17 @@ +Das ZIP-File DBII_Praktikum4 enthält die folgenden Dateien: + +- DBII_Praktikum4.pdf: Praktikumsaufgabe 4 +- DBII_plsql.pdf: Anlagemit Hinweisen zur PL/SQL-Syntax unter Oracle. + +- assistenz_*.*: Datenmodell, Stored Function und Trigger zur Hörsaalübung + vom 24.04.2006 + +- esql*.sql: PL/SQL-Skripts zu den Beispielen aus den Folien zur Vorle- + sung, Kapitel 6.2.1 + +- p1*.sql: DDL-Skript, Inserts, Stored Procedure und Trigger zum + Beispiel aus dem Skript, Kapitel 6.2.2 + +- sequenz_*.sql: Trigger zur Generierung eines Autoinkrement-Datentyps und + Oracle Sequence-Objekte + diff --git a/Bachelor/Datenbanken 2/Praktikum4/sequenz_Oracle.sql b/Bachelor/Datenbanken 2/Praktikum4/sequenz_Oracle.sql new file mode 100644 index 0000000..6902f5b --- /dev/null +++ b/Bachelor/Datenbanken 2/Praktikum4/sequenz_Oracle.sql @@ -0,0 +1,38 @@ +-- Der Oracle-Sequenzdefinition +-- Zur Generierung von systemseitig vergebenen, synthetischen und fort- +-- laufenden Schlüsselwerten bietet Oracle das Sequenz-Konzept an: + +CREATE SEQUENCE [.] + [ INCREMENT BY ] + [ START WITH ] + [ NOMAXVALUE | MAXVALUE ] + [ NOMINVALUE | MINVALUE ] + [ NOCYCLE | CYCLE ] + [ NOCACHE | CACHE ] + [ ORDER | NOORDER ]; + +-- die unterschiedlichen Klauseln sind z.T. selbsterklärend bzw. +-- vgl. die Oracle-Literatur! + +-- *************************************************************** + +-- Beispielsequenz für die Testtabelle mit defaults für alle Klauseln +-- ausser INCREMENT BY 2 bei Startwert 2 + +CREATE SEQUENCE testsequenz INCREMENT BY 2 START WITH 2; + +-- *************************************************************** + +-- Eine definierte Sequenz kann anschliessende in Insert- und Update- +-- Anweisungen benutzt werden: +-- .NEXTVAL lässt sich den nächsten Wert erzeugen +-- .CURVAL lässt den (auch wiederholten) Zugriff auf den +-- aktuellen Seuqenzwert zu + +-- **************************************************************** +-- Inserts auf unserer Test-Tabelle über die Sequenz "testsequenz" +-- vorsichtshalber vorher: + +delete from test; + +insert into test values (testsequenz.nextval, 'DDD'); \ No newline at end of file diff --git a/Bachelor/Datenbanken 2/Praktikum4/sequenz_Trigger.sql b/Bachelor/Datenbanken 2/Praktikum4/sequenz_Trigger.sql new file mode 100644 index 0000000..38963db --- /dev/null +++ b/Bachelor/Datenbanken 2/Praktikum4/sequenz_Trigger.sql @@ -0,0 +1,59 @@ +-- Trigger zur Generierung eines synthetischen, sequenziellen Integer- +-- Datentyps + +--************************************************************ + +-- Der Trigger wird für die folgende Tabelle Test generiert: + +create table test +( mypk integer not null, + mycolumn varchar2(3), + primary key (mypk) +); + +--************************************************************ +-- TRIGGER-DEKLARATION +--************************************************************ + +-- trigger-kopf +create or replace trigger synthkey +before insert on test +for each row + +-- deklarationsblock +declare + vmax integer; + +-- Anweisungen +begin + +-- max wert von pk suchen +select max(mypk) into vmax +from test; + +if vmax is null +then vmax := 0; +end if; + +vmax:=vmax+1; + +-- aktuellen PK-Wert des Inserts mit vmax belegen +:new.mypk := vmax; + +end; +/ + +-- *************************************************** + + +-- entweder gibt man beim insert für die PK-Spalte mypk einen dummy ein, +-- der dann vom Trigger überschrieben wird: + +insert into test values (0,'AAA'); + +-- oder man lässt den Wert für die PK-Spalte beim insert weg: + +insert into test (mycolumn) values ('BBB'); + + + diff --git a/Bachelor/Datenbanken 2/Praktikum5/DBII_Praktikum5.pdf b/Bachelor/Datenbanken 2/Praktikum5/DBII_Praktikum5.pdf new file mode 100644 index 0000000..6b5ad37 Binary files /dev/null and b/Bachelor/Datenbanken 2/Praktikum5/DBII_Praktikum5.pdf differ diff --git a/Bachelor/Datenbanken 2/Praktikum5/ORDML.sql b/Bachelor/Datenbanken 2/Praktikum5/ORDML.sql new file mode 100644 index 0000000..20a685b --- /dev/null +++ b/Bachelor/Datenbanken 2/Praktikum5/ORDML.sql @@ -0,0 +1,61 @@ +/* Dieses Skript enthält alle INSERTS und UPDATES + zum Anlegen zweier Kunden und zweier Aufträge, + die sich gegenseitig referenzieren (Bsp. Kapitel 7). + Basis hierfür sind die Types aus dem Skript + ORTypes.sql +*/ +-- Kunde 1 (ohne Auftragsreferenzen) +INSERT INTO T_Kunde (KNr,Name,Adresse,Telefon,Kontakt) +VALUES (10,'Schmidt', + Typ_Adresse(64295,'DA','X-Str.','45'), + Typ_Telefon('111','222',NULL), + Typ_Kontakt('Kontaktmann 5','Kontaktmann 6') + ); + +-- Kunde 2 (ohne Auftragsreferenzen) +INSERT INTO T_Kunde (KNr,Name,Adresse,Telefon,Kontakt) +VALUES (20,'Huber', + Typ_Adresse(60433,'FFM','Y-Str.','56'), + Typ_Telefon('333','NULL',NULL), + Typ_Kontakt('Person 1','Person 2','Person 3') + ); + +-- Auftrag 1 (ohne Kundenreferenz) +INSERT INTO T_Auftrag (ANr,Eingang,Bearb) +VALUES (101,'24.05.2005','24.05.2005'); + +-- Auftrag 2 (ohne Kundenreferenz) +INSERT INTO T_Auftrag (ANr,Eingang,Bearb) +VALUES (102,'31.05.2005','31.05.2005'); + +-- Kundenreferenzen in Auftragsobjekte eintragen +UPDATE T_Auftrag a +SET a.RefKunde = (SELECT REF(k) + FROM T_Kunde k + WHERE k.KNr = 10) +WHERE a.Anr = 101; + +UPDATE T_Auftrag a +SET a.RefKunde = (SELECT REF(k) + FROM T_Kunde k + WHERE k.KNr = 20) +WHERE a.Anr = 102; + +-- Tabelle der Auftragsreferenzen in Kundenobjekte eintragen +UPDATE T_Kunde k +SET k.RefAuftrag = CAST(MULTISET + (SELECT REF(a) + FROM T_Auftrag a + WHERE a.RefKunde.knr = 10) AS Typ_Auftragtab) +WHERE k.knr = 10; + +UPDATE T_Kunde k +SET k.RefAuftrag = CAST(MULTISET + (SELECT REF(a) + FROM T_Auftrag a + WHERE a.RefKunde.knr = 20) AS Typ_Auftragtab) +WHERE k.knr = 20; + +-- Verwendung der Methode Last_Bestellung als Spaltenfunktion +select k.KNr, k.Last_Bestellung() +from T_Kunde k; diff --git a/Bachelor/Datenbanken 2/Praktikum5/ORDML_p5.sql b/Bachelor/Datenbanken 2/Praktikum5/ORDML_p5.sql new file mode 100644 index 0000000..fb0c6e4 --- /dev/null +++ b/Bachelor/Datenbanken 2/Praktikum5/ORDML_p5.sql @@ -0,0 +1,82 @@ +-- Firma 1 (ohne Firmenreferenzen) +INSERT INTO T_Firma (RegNr,Name,Adresse,Umsatz) +VALUES (123,'A-Firma', + Typ_Adresse(65432,'A-Stadt','B-Weg','17'), + 150 + ); +-- Firma 1a (ohne Firmenreferenzen) +INSERT INTO T_Firma (RegNr,Name,Adresse,Umsatz) +VALUES (124,'A1-Firma', + Typ_Adresse(76543,'B-Stadt','C-Str','25'), + 20 + ); +-- Firma 1b (ohne Firmenreferenzen) +INSERT INTO T_Firma (RegNr,Name,Adresse,Umsatz) +VALUES (125,'A2-Firma', + Typ_Adresse(87654,'C-Stadt','D-Weg','33'), + 30 + ); + +-- Firma 2 (ohne Firmenreferenzen) +INSERT INTO T_Firma (RegNr,Name,Adresse,Umsatz) +VALUES (234,'B-Firma', + Typ_Adresse(12345,'Z-Stadt','X-Str','87'), + 100 + ); +-- Firma 2a (ohne Firmenreferenzen) +INSERT INTO T_Firma (RegNr,Name,Adresse,Umsatz) +VALUES (235,'B1-Firma', + Typ_Adresse(23456,'Y-Stadt','Y-Weg','92'), + 10 + ); + +-- Firma 3 (ohne Firmenreferenzen) +INSERT INTO T_Firma (RegNr,Name,Adresse,Umsatz) +VALUES (345,'C-Firma', + Typ_Adresse(12345,'Z-Stadt','Y-Str','55'), + 200 + ); +-- Firma 3a (ohne Firmenreferenzen) +INSERT INTO T_Firma (RegNr,Name,Adresse,Umsatz) +VALUES (346,'C1-Firma', + Typ_Adresse(76543,'B-Stadt','D-Str','88'), + 135 + ); +-- Firma 3b (ohne Firmenreferenzen) +INSERT INTO T_Firma (RegNr,Name,Adresse,Umsatz) +VALUES (347,'C2-Firma', + Typ_Adresse(12345,'Z-Stadt','X-Weg','66'), + 50 + ); +-- Firma 3c (ohne Firmenreferenzen) +INSERT INTO T_Firma (RegNr,Name,Adresse,Umsatz) +VALUES (348,'C2-Firma', + Typ_Adresse(65432,'A-Stadt','A-Str','12'), + 15 + ); +-- + +UPDATE T_Firma Subunternehmen f +SET f.Subunternehmen = CAST ( MULTISET + (SELECT REF(f2) + FROM T_Firma f2 + WHERE f2.RegNr = 124 OR f2.RegNr=125)) AS Typ_FirmaTab) +WHERE RegNr=123; + +UPDATE T_Firma Subunternehmen f +SET f.Subunternehmen = CAST ( MULTISET + (SELECT REF(f2) + FROM T_Firma f2 + WHERE f2.RegNr = 235)) AS Typ_FirmaTab) +WHERE RegNr=234; + +UPDATE T_Firma Subunternehmen f +SET f.Subunternehmen = CAST ( MULTISET + (SELECT REF(f2) + FROM T_Firma f2 + WHERE f2.RegNr = 346 OR f2.RegNr=347 OR f2.RegNr=348)) AS Typ_FirmaTab) +WHERE RegNr=345; + +-- Verwendung der Methode Last_Bestellung als Spaltenfunktion +--select k.KNr, k.Last_Bestellung() +--from T_Kunde k; \ No newline at end of file diff --git a/Bachelor/Datenbanken 2/Praktikum5/ORTypes.sql b/Bachelor/Datenbanken 2/Praktikum5/ORTypes.sql new file mode 100644 index 0000000..bef07fc --- /dev/null +++ b/Bachelor/Datenbanken 2/Praktikum5/ORTypes.sql @@ -0,0 +1,119 @@ +/* Dieses Skript enthält alle Deklarationen der Types + zum Vorlesungsbeispiel, Kapitel 7, sowie die + Deklarationen der beiden Tabellen T_Kunde und + T_Auftrag und des Methodenrumpfes der Methode + Last_Bestellung() +*/ + +-- Die Generierung der Types ************************* +CREATE TYPE Typ_Adresse +AS OBJECT +( plz NUMBER(5), + ort VARCHAR2(20), + strasse VARCHAR2(20), + hausnr VARCHAR2(5) +); +/ + +CREATE TYPE Typ_Kontakt +AS TABLE + OF VARCHAR2(20); +/ + +CREATE TYPE Typ_Telefon +AS VARRAY(3) + OF VARCHAR2(20); +/ + +-- Vorwärtsdeklaration Typ_Auftrag +CREATE TYPE Typ_Auftrag; +/ + +CREATE TYPE Typ_AuftragTab AS TABLE +OF REF Typ_Auftrag; +/ + +-- typ_kunde mit Methode + +-- Auftragsreferenzen +CREATE TYPE Typ_Kunde +AS OBJECT ( + KNr INTEGER, + Name VARCHAR2(20), + Adresse Typ_Adresse, + Telefon Typ_Telefon, + Kontakt Typ_Kontakt, + RefAuftrag Typ_AuftragTab, + MEMBER FUNCTION Last_Bestellung + RETURN date +); +/ + +CREATE TYPE Typ_Auftrag +AS OBJECT ( + ANr INTEGER, + Eingang DATE, + Bearb DATE, + RefKunde REF Typ_Kunde +); +/ +-- Methodenrumpf zur Methode Last_Bestellung +/* - Der Methodenrumpf arbeitet ausschliesslich mit + Attributen des Types Typ_Kunde, die Deklaration + ist also insbesondere unabhängig von der Deklaration + der Tabelle T_Kunde (und erst recht von der Deklaration + der Tabelle T_Auftrag) + - Die Ermittlung des maximalen Eingangsdatums erfordert + ausschliesslich ein Lesen der Einträge in der nested + table RefAuftrag des aktuellen Kundenobjektes self. +*/ +CREATE OR REPLACE TYPE BODY Typ_Kunde AS + MEMBER FUNCTION Last_Bestellung + RETURN date is + lastdate date; + BEGIN + SELECT MAX(a.column_value.Eingang) INTO lastdate + FROM table(self.RefAuftrag) a; + RETURN lastdate; + END; + END; +/ + +-- Die Generierung der beiden Tabellen ******************* +CREATE TABLE T_Auftrag +OF Typ_Auftrag ( + ANr primary key); + +CREATE TABLE T_Kunde +OF Typ_Kunde( + KNr primary key) +NESTED TABLE Kontakt + STORE AS Kunde_Kontakt_Liste, +NESTED TABLE RefAuftrag + STORE AS Kunde_Auftrag_Liste; + +/* Objekte, die als Instanzen dieser beiden + Tabellen verwaltet werden, sind Objekt-ADTs + und können über OIDs referenziert werden, + Objekte, die nur als Wert eines anderen + Objektes auftauchen, wie z.B. die Adress-Objekte + in den Kunden-Objekten, sind Werte-ADTs +*/ + + + + + + + + + + + + + + + + + + + diff --git a/Bachelor/Datenbanken 2/Praktikum5/ORTypes_p5.sql b/Bachelor/Datenbanken 2/Praktikum5/ORTypes_p5.sql new file mode 100644 index 0000000..2e1f8c1 --- /dev/null +++ b/Bachelor/Datenbanken 2/Praktikum5/ORTypes_p5.sql @@ -0,0 +1,65 @@ +/* +*/ + +-- Die Generierung der Types ************************* +CREATE TYPE Typ_Adresse +AS OBJECT +( plz NUMBER(5), + ort VARCHAR2(20), + strasse VARCHAR2(20), + hausnr VARCHAR2(5) +); +/ + +-- Vorwärtsdeklaration Typ_Firma +CREATE TYPE Typ_Firma; +/ + +CREATE TYPE Typ_FirmaTab AS TABLE +OF REF Typ_Firma; +/ + +CREATE TYPE Typ_Firma +AS OBJECT ( + RegNr INTEGER, + Name VARCHAR2(20), + Adresse Typ_Adresse, + Umsatz INTEGER, + Subunternehmen Typ_FirmaTab, + MEMBER FUNCTION getAnzSubunternehmen + RETURN INTEGER +); +/ + +CREATE OR REPLACE TYPE BODY Typ_Firma AS + MEMBER FUNCTION getAnzSubunternehmen + RETURN INTEGER is + BEGIN + return self.Subunternehmen.count + END; + END; +/ + +CREATE TABLE T_Firma +OF Typ_Firma( + RegNr primary key) +NESTED TABLE Subunternehmen + STORE AS Firma_Subunternehmen_Liste; + + + + + + + + + + + + + + + + + + diff --git a/Bachelor/Datenbanken 2/Praktikum5/db2prk5.jpg b/Bachelor/Datenbanken 2/Praktikum5/db2prk5.jpg new file mode 100644 index 0000000..ba8779c Binary files /dev/null and b/Bachelor/Datenbanken 2/Praktikum5/db2prk5.jpg differ diff --git a/Bachelor/Datenbanken 2/Praktikum6/DB2P6.java b/Bachelor/Datenbanken 2/Praktikum6/DB2P6.java new file mode 100644 index 0000000..d703135 --- /dev/null +++ b/Bachelor/Datenbanken 2/Praktikum6/DB2P6.java @@ -0,0 +1,132 @@ + /** + * + */ + +/** + * @author sven + * + */ +import java.io.*; +import java.util.*; +import java.sql.*; + +public class DB2P6 { + + static private Connection con; + + static private Statement stmt; + static private String query; + static private PreparedStatement pStmt; + //static private CallableStatement cStmt; + + static private ResultSet rs; + + static private BufferedReader bf; + /** + * @param args + */ + public static void main(String[] args) + throws SQLException, IOException { + // TODO Auto-generated method stub + bf = new BufferedReader(new InputStreamReader(System.in)); + System.out.println("Username: "); + String username = bf.readLine(); + System.out.println("Password: "); + String pw = bf.readLine(); + + // 1. Treiber-Klasse für JdbcOdbcDriver laden und registrieren + String driverClass = + "sun.jdbc.odbc.JdbcOdbcDriver"; + try { + Class.forName(driverClass); + } + catch (ClassNotFoundException exc) { + System.out.println("c1: "+exc.getMessage()); + System.exit(1); + } + + // Wieviele Elemente sind derzeit bei der Klasse DriverManager + // registriert? + Enumeration e = DriverManager.getDrivers(); + while (e.hasMoreElements()) + System.out.println("Beim DriverManager registriert: " + + e.nextElement() + "\n"); + + // 2. Connection aufbauen + try { + String url = "jdbc:odbc:db2p6"; + con = DriverManager.getConnection(url,username,pw); + System.out.println("Jetzt ist die Connection da"); + // Transaktionsmanagement: AutoCommit off + con.setAutoCommit(false); + System.out.println("Isolation Level: "); + System.out.println("1: Read Committed"); + System.out.println("2: Serializable"); + String il = bf.readLine(); + // Isolationlevel setzen + if (il.equals("1")) + con.setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED); + else if (il.equals("2")) + con.setTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE); + else + con.setTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE); + //System.out.println(con.getTransactionIsolation()); + con.commit(); + } + catch (SQLException exc) { + System.out.println("c2: "+exc.getMessage()); + } + //String vAcode; + String vAname; + try { + query = "SELECT aname FROM AUTOR"; + stmt = con.createStatement(); + rs = stmt.executeQuery(query); + while (rs.next()) { + //vAcode=rs.getString(1); + vAname=rs.getString(1); + System.out.println(vAname); + } + rs.close(); + } + catch (SQLException exc) { + System.out.println("c2: "+exc.getMessage()); + } + try { + pStmt = con.prepareStatement("insert into autor values (?,?)"); + System.out.println("Autor code: "); + String vNewAcode = bf.readLine(); + System.out.println("Autor Name: "); + String vNewAname = bf.readLine(); + pStmt.setString(1,vNewAcode); + pStmt.setString(2,vNewAname); + pStmt.executeUpdate(); + con.commit(); + } + catch (SQLException exc) { + con.rollback(); + System.out.println("c2: "+exc.getMessage()); + } + System.out.println("Autorenliste nochmals anzeigen? [J/N]"); + String auswahl = bf.readLine(); + if (auswahl.toUpperCase().equals("J")) + { + try { + query = "SELECT aname FROM AUTOR"; + stmt = con.createStatement(); + rs = stmt.executeQuery(query); + while (rs.next()) { + //vAcode=rs.getString(1); + vAname=rs.getString(1); + System.out.println(vAname); + } + rs.close(); + } + catch (SQLException exc) { + System.out.println("c2: "+exc.getMessage()); + } + } + } +} + + diff --git a/Bachelor/Datenbanken 2/Praktikum6/DBII_Praktikum6.pdf b/Bachelor/Datenbanken 2/Praktikum6/DBII_Praktikum6.pdf new file mode 100644 index 0000000..9d6d0ab Binary files /dev/null and b/Bachelor/Datenbanken 2/Praktikum6/DBII_Praktikum6.pdf differ diff --git a/Bachelor/Datenbanken 2/Teil.java b/Bachelor/Datenbanken 2/Teil.java new file mode 100644 index 0000000..643ca89 --- /dev/null +++ b/Bachelor/Datenbanken 2/Teil.java @@ -0,0 +1,34 @@ +package JDBC; + +import java.util.*; +import java.io.*; + +public class Teil +{ + public String tNr; + public String tBez; + + public Vector tP = new Vector(); + public Vector tC = new Vector(); + + public Teil(String nr, String bez) + { + this.tNr=nr; + this.tBez=bez; + } + + public Enumeration getParents() + { + return this.tP.elements(); + } + + public Enumeration getChildren() + { + return this.tC.elements(); + } + + public String toString() + { + return tNr+" "+tBez; + } +} diff --git a/Bachelor/Datenbanken 2/teile.mdb b/Bachelor/Datenbanken 2/teile.mdb new file mode 100644 index 0000000..542c335 Binary files /dev/null and b/Bachelor/Datenbanken 2/teile.mdb differ -- cgit v1.2.3