diff options
| author | Sven Eisenhauer <sven@sven-eisenhauer.net> | 2023-11-10 15:11:48 +0100 |
|---|---|---|
| committer | Sven Eisenhauer <sven@sven-eisenhauer.net> | 2023-11-10 15:11:48 +0100 |
| commit | 33613a85afc4b1481367fbe92a17ee59c240250b (patch) | |
| tree | 670b842326116b376b505ec2263878912fca97e2 /Bachelor/Datenbanken 2 | |
| download | Studium-33613a85afc4b1481367fbe92a17ee59c240250b.tar.gz Studium-33613a85afc4b1481367fbe92a17ee59c240250b.tar.bz2 | |
Diffstat (limited to 'Bachelor/Datenbanken 2')
55 files changed, 2145 insertions, 0 deletions
diff --git a/Bachelor/Datenbanken 2/DB2SS05.pdf b/Bachelor/Datenbanken 2/DB2SS05.pdf Binary files differnew file mode 100644 index 0000000..f06640d --- /dev/null +++ b/Bachelor/Datenbanken 2/DB2SS05.pdf diff --git a/Bachelor/Datenbanken 2/DBIISoSe06.pdf b/Bachelor/Datenbanken 2/DBIISoSe06.pdf Binary files differnew file mode 100644 index 0000000..d4115bc --- /dev/null +++ b/Bachelor/Datenbanken 2/DBIISoSe06.pdf diff --git a/Bachelor/Datenbanken 2/DBIISoSe06_K611.pdf b/Bachelor/Datenbanken 2/DBIISoSe06_K611.pdf Binary files differnew file mode 100644 index 0000000..3435825 --- /dev/null +++ b/Bachelor/Datenbanken 2/DBIISoSe06_K611.pdf diff --git a/Bachelor/Datenbanken 2/DBIISoSe06_K611_F5neu.pdf b/Bachelor/Datenbanken 2/DBIISoSe06_K611_F5neu.pdf Binary files differnew file mode 100644 index 0000000..eb429ae --- /dev/null +++ b/Bachelor/Datenbanken 2/DBIISoSe06_K611_F5neu.pdf diff --git a/Bachelor/Datenbanken 2/DBIISoSe06_K62.pdf b/Bachelor/Datenbanken 2/DBIISoSe06_K62.pdf Binary files differnew file mode 100644 index 0000000..0326b65 --- /dev/null +++ b/Bachelor/Datenbanken 2/DBIISoSe06_K62.pdf diff --git a/Bachelor/Datenbanken 2/DBIISoSe06_K63.pdf b/Bachelor/Datenbanken 2/DBIISoSe06_K63.pdf Binary files differnew file mode 100644 index 0000000..f1e9684 --- /dev/null +++ b/Bachelor/Datenbanken 2/DBIISoSe06_K63.pdf diff --git a/Bachelor/Datenbanken 2/DBIISoSe06_K63_Rest.pdf b/Bachelor/Datenbanken 2/DBIISoSe06_K63_Rest.pdf Binary files differnew file mode 100644 index 0000000..6043beb --- /dev/null +++ b/Bachelor/Datenbanken 2/DBIISoSe06_K63_Rest.pdf diff --git a/Bachelor/Datenbanken 2/DBIISoSe06_K7.pdf b/Bachelor/Datenbanken 2/DBIISoSe06_K7.pdf Binary files differnew file mode 100644 index 0000000..12023b7 --- /dev/null +++ b/Bachelor/Datenbanken 2/DBIISoSe06_K7.pdf diff --git a/Bachelor/Datenbanken 2/DBIISoSe06_K7.zip b/Bachelor/Datenbanken 2/DBIISoSe06_K7.zip Binary files differnew file mode 100644 index 0000000..e06aae1 --- /dev/null +++ b/Bachelor/Datenbanken 2/DBIISoSe06_K7.zip diff --git a/Bachelor/Datenbanken 2/DBIISoSe06_K7_Hoersaaluebung.pdf b/Bachelor/Datenbanken 2/DBIISoSe06_K7_Hoersaaluebung.pdf Binary files differnew file mode 100644 index 0000000..f3ae95b --- /dev/null +++ b/Bachelor/Datenbanken 2/DBIISoSe06_K7_Hoersaaluebung.pdf diff --git a/Bachelor/Datenbanken 2/DBIISoSe06_K8.pdf b/Bachelor/Datenbanken 2/DBIISoSe06_K8.pdf Binary files differnew file mode 100644 index 0000000..e6a10ba --- /dev/null +++ b/Bachelor/Datenbanken 2/DBIISoSe06_K8.pdf diff --git a/Bachelor/Datenbanken 2/DBII_Praktikum1.pdf b/Bachelor/Datenbanken 2/DBII_Praktikum1.pdf Binary files differnew file mode 100644 index 0000000..c4db908 --- /dev/null +++ b/Bachelor/Datenbanken 2/DBII_Praktikum1.pdf 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 Binary files differnew file mode 100644 index 0000000..b76e23f --- /dev/null +++ b/Bachelor/Datenbanken 2/MyJdbc.zip 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 Binary files differnew file mode 100644 index 0000000..ca30f92 --- /dev/null +++ b/Bachelor/Datenbanken 2/Praktikum2/DBII_Praktikum2.pdf diff --git a/Bachelor/Datenbanken 2/Praktikum2/DBII_Praktikum2.zip b/Bachelor/Datenbanken 2/Praktikum2/DBII_Praktikum2.zip Binary files differnew file mode 100644 index 0000000..59c8bee --- /dev/null +++ b/Bachelor/Datenbanken 2/Praktikum2/DBII_Praktikum2.zip diff --git a/Bachelor/Datenbanken 2/Praktikum2/DataArchitect.pdf b/Bachelor/Datenbanken 2/Praktikum2/DataArchitect.pdf Binary files differnew file mode 100644 index 0000000..04ca748 --- /dev/null +++ b/Bachelor/Datenbanken 2/Praktikum2/DataArchitect.pdf diff --git a/Bachelor/Datenbanken 2/Praktikum2/DisplayPreferences.pdf b/Bachelor/Datenbanken 2/Praktikum2/DisplayPreferences.pdf Binary files differnew file mode 100644 index 0000000..3240271 --- /dev/null +++ b/Bachelor/Datenbanken 2/Praktikum2/DisplayPreferences.pdf diff --git a/Bachelor/Datenbanken 2/Praktikum3/DBII_Praktikum3.pdf b/Bachelor/Datenbanken 2/Praktikum3/DBII_Praktikum3.pdf Binary files differnew file mode 100644 index 0000000..2fe5afe --- /dev/null +++ b/Bachelor/Datenbanken 2/Praktikum3/DBII_Praktikum3.pdf diff --git a/Bachelor/Datenbanken 2/Praktikum3/DBII_Praktikum3.zip b/Bachelor/Datenbanken 2/Praktikum3/DBII_Praktikum3.zip Binary files differnew file mode 100644 index 0000000..9a2c053 --- /dev/null +++ b/Bachelor/Datenbanken 2/Praktikum3/DBII_Praktikum3.zip 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 Binary files differnew file mode 100644 index 0000000..0799a9e --- /dev/null +++ b/Bachelor/Datenbanken 2/Praktikum4/DBII_Praktikum4.pdf diff --git a/Bachelor/Datenbanken 2/Praktikum4/DBII_Praktikum4.zip b/Bachelor/Datenbanken 2/Praktikum4/DBII_Praktikum4.zip Binary files differnew file mode 100644 index 0000000..cf4b844 --- /dev/null +++ b/Bachelor/Datenbanken 2/Praktikum4/DBII_Praktikum4.zip diff --git a/Bachelor/Datenbanken 2/Praktikum4/DBII_plsql.pdf b/Bachelor/Datenbanken 2/Praktikum4/DBII_plsql.pdf Binary files differnew file mode 100644 index 0000000..334b6d9 --- /dev/null +++ b/Bachelor/Datenbanken 2/Praktikum4/DBII_plsql.pdf diff --git a/Bachelor/Datenbanken 2/Praktikum4/assistenz_datenmodell.pdf b/Bachelor/Datenbanken 2/Praktikum4/assistenz_datenmodell.pdf Binary files differnew file mode 100644 index 0000000..5fdbb28 --- /dev/null +++ b/Bachelor/Datenbanken 2/Praktikum4/assistenz_datenmodell.pdf 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 [<Schema>.]<Sequenz>
+ [ INCREMENT BY <Wert> ]
+ [ START WITH <Wert> ]
+ [ NOMAXVALUE | MAXVALUE <Wert> ]
+ [ NOMINVALUE | MINVALUE <Wert> ]
+ [ NOCYCLE | CYCLE ]
+ [ NOCACHE | CACHE <Wert> ]
+ [ 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:
+-- <Sequenz>.NEXTVAL lässt sich den nächsten Wert erzeugen
+-- <Sequenz>.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 Binary files differnew file mode 100644 index 0000000..6b5ad37 --- /dev/null +++ b/Bachelor/Datenbanken 2/Praktikum5/DBII_Praktikum5.pdf 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 Binary files differnew file mode 100644 index 0000000..ba8779c --- /dev/null +++ b/Bachelor/Datenbanken 2/Praktikum5/db2prk5.jpg 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 Binary files differnew file mode 100644 index 0000000..9d6d0ab --- /dev/null +++ b/Bachelor/Datenbanken 2/Praktikum6/DBII_Praktikum6.pdf 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 Binary files differnew file mode 100644 index 0000000..542c335 --- /dev/null +++ b/Bachelor/Datenbanken 2/teile.mdb |
