Skript-Spalten.sql
Erscheinungsbild
(Einführung in SQL: Downloads: Skript-Spalten.sql)
Die Befehle auf dieser Seite manipulieren die Struktur der Beispieldatenbank durch Hinzufügen und Ändern einzelner Spalten. Die Anleitung steht im Anhang B Downloads.
/******************************************************** * Spalten hinzufügen ********************************************************/ /* Die Tabelle Versicherungsvertrag benötigt mehrere Spalten wegen Prämienberechnung und Schadenfreiheitsrabatt. */ ALTER TABLE Versicherungsvertrag ADD [COLUMN] Basispraemie DECIMAL DEFAULT 500 NOT NULL CONSTRAINT Vertrag_Basispraemie_Check CHECK(Basispraemie > 0), ADD [COLUMN] Praemiensatz INTEGER DEFAULT 100 NOT NULL CONSTRAINT Vertrag_Praemiensatz_Check CHECK(Praemiensatz > 0), ADD [COLUMN] Praemienaenderung DATE; /* Die Tabelle Zuordnung_SF_FZ benötigt die Spalte Schuldanteil wegen Prämienberechnung und Schadenfreiheitsrabatt. */ ALTER TABLE Zuordnung_SF_FZ ADD [COLUMN] Schuldanteil INTEGER CONSTRAINT Schadensfall_Schuldanteil CHECK(Schuldanteil BETWEEN 0 AND 100); /* Bei der Tabelle Mitarbeiter wird die Spalte Geschlecht eingefügt; als Werte sind nur 'W' (= weiblich) und 'M' (= männlich) vorgesehen. */ ALTER TABLE Mitarbeiter ADD [COLUMN] Geschlecht CHAR(1) DEFAULT 'W' NOT NULL CONSTRAINT Mitarbeiter_Geschlecht CHECK( Geschlecht = 'W' OR Geschlecht = 'M'); /* Die gleiche Änderung ist bei der Tabelle Versicherungsnehmer nötig. Aber bei Firmennamen ist NULL möglich; deshalb muss auch auf den Default-Wert verzichtet werden. */ ALTER TABLE Versicherungsnehmer ADD [COLUMN] Geschlecht CHAR(1) CONSTRAINT Versicherungsnehmer_Geschlecht CHECK( Geschlecht = 'W' OR Geschlecht = 'M' OR Geschlecht IS NULL); /* Sofern der Vorgabewert nicht automatisch eingetragen wird, kann das leicht nachgeholt werden: */ UPDATE Versicherungsvertrag SET Basispraemie = 500, Praemiensatz = 100; UPDATE Mitarbeiter SET Geschlecht = 'W'; /******************************************************** * Spalten ändern: Datentyp ändern ********************************************************/ /* Manchmal funktioniert der direkte Weg: */ /* Datentyp ändern */ ALTER TABLE Abteilung ALTER COLUMN Kuerzel TYPE CHAR(4); /* Andernfalls ist ein „Umweg“ über eine temporäre Spalte nötig. */ /* Erzeugen Sie eine neue, temporäre Spalte. */ ALTER TABLE Abteilung ADD [COLUMN] TEMP VARCHAR(10); /* Kopieren Sie alle Inhalte aus der „alten“ Spalte in die temporäre Spalte. */ UPDATE Abteilung SET temp = Kuerzel; /* Löschen Sie die „alte“ Spalte. */ ALTER TABLE Abteilung DROP [COLUMN] Kuerzel; /* Erzeugen Sie eine neue Spalte unter dem „alten“ Namen mit den „neuen“ Eigenschaften. */ ALTER TABLE Abteilung ADD [COLUMN] Kuerzel CHAR(4) NOT NULL; /* Kopieren Sie alle Inhalte aus der temporären Spalte in die neue Spalte, wobei sie passend konvertiert werden müssen. */ UPDATE Abteilung SET Kuerzel = SUBSTRING(temp FROM 1 FOR 4); /* Löschen Sie die temporäre Spalte. */ ALTER TABLE Abteilung DROP [COLUMN] temp; /******************************************************** * Spalten ändern: Vorgabewert hinzufügen ********************************************************/ /* Manchmal funktioniert der direkte Weg: */ /* Bedingung hinzufügen */ ALTER TABLE Mitarbeiter MODIFY Ist_Leiter CHAR(1) NOT NULL DEFAULT 'N'; /* Andernfalls ist ebenso ein „Umweg“ über eine temporäre Spalte nötig. */ /* Erzeugen Sie eine neue, temporäre Spalte. */ ALTER TABLE Mitarbeiter ADD [COLUMN] TEMP CHAR(1); /* Kopieren Sie alle Inhalte aus der „alten“ Spalte in die temporäre Spalte. */ UPDATE Mitarbeiter SET temp = Ist_Leiter; /* Löschen Sie die „alte“ Spalte. */ ALTER TABLE Mitarbeiter DROP [COLUMN] Ist_Leiter; /* Erzeugen Sie eine neue Spalte unter dem „alten“ Namen mit den „neuen“ Eigenschaften. */ ALTER TABLE Mitarbeiter ADD [COLUMN] Ist_Leiter CHAR(1) NOT NULL DEFAULT 'N'; /* Kopieren Sie alle Inhalte aus der temporären Spalte in die neue Spalte, wobei sie passend konvertiert werden müssen. */ UPDATE Mitarbeiter SET Ist_Leiter = temp; /* Löschen Sie die temporäre Spalte. */ ALTER TABLE Mitarbeiter DROP [COLUMN] temp;