Skript-Spalten.sql

Aus Wikibooks

Seitentitel: Einführung in SQL: Downloads: Skript-Spalten.sql
(Einführung in SQL: Downloads: 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;