Skript-Spalten.sql
(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;