Durch Angabe einer MODIFY-Definition (modify_definition) in der ALTER TABLE-Anweisung können Sie Datentypen und Spaltenattribute ändern.
<modify_definition> ::= MODIFY (<modify_column_definition>,...)
<modify_column_definition> ::=
<column_name> <data_type> <column_attributes>
| <column_name> <data_type>
| <column_name> <column_attributes>
SQL-Tutorial,
Tabellen
Die Klammern können entfallen, wenn die MODIFY-Definition nur einen Spaltennamen column_name enthält.
Jeder Spaltenname muss eine Spalte der in der ALTER TABLE-Anweisung angegebenen Basistabelle bezeichnen.
Wenn eine der durch column_name spezifizierten Spalten in einer CONSTRAINT-Definition der Tabelle enthalten ist, dann muss diese Spalte auch nach einer Datentypänderung eine legale Suchbedingung definieren.
Wenn keine DEFAULT-Spezifikation angegeben wird und für die entsprechende Spalte eine DEFAULT-Spezifikation definiert ist, dann muss diese zum Datentyp data_type kompatibel sein.
● Codeattribut ASCII: Die entsprechende Spalte muss vor der Modifikation den Datentyp DATE, TIME oder TIMESTAMP oder das Codeattribut ASCII oder UNICODE besitzen.
● Codeattribut UNICODE: Für die entsprechende Spalte muss eine Transformation von UNICODE nach ASCII möglich sein.
● Codeattribut BYTE: Die entsprechende Spalte muss vor der Modifikation den Datentyp DATE, TIME oder TIMESTAMP oder das Codeattribut ASCII oder BYTE besitzen.
Datentyp CHAR(n), VARCHAR(n): Die entsprechende Spalte muss
den Datentyp CHAR(n), VARCHAR(n), DATE,
TIME oder TIMESTAMP besitzen. Die Tabelle darf in diesem Fall keine Zeile
enthalten, die in der Spalte einen Wert einer Länge größer als n besitzt.
Falls eine Spalte vor der Ausführung der ALTER TABLE-Anweisung das
Codeattribut UNICODE besaß und das neue Codeattribut von UNICODE verschieden
ist, muss eine Transformation in das neue Codeattribut möglich
sein.
Datentyp DATE: Die entsprechende Spalte muss den Datentyp CHAR(n), VARCHAR(n) oder DATE besitzen. Alle Zeilen der Tabelle müssen in der Spalte einen Wert enthalten, der einem Datum in einem beliebigen vom Datenbanksystem unterstützten Datumsformat entspricht.
Datentyp FIXED(n,m): Die entsprechende Spalte muss den Datentyp FIXED(n,m), FLOAT, INT oder SMALLINT besitzen. Die Tabelle darf in diesem Fall keine Zeile enthalten, die in der Spalte einen Wert mit mehr als (n-m) Vorkomma- oder m Nachkommastellen besitzt.
Datentyp FLOAT(n): Die entsprechende Spalte muss den Datentyp FIXED(n,m), FLOAT(n), INT oder SMALLINT besitzen.
Datentyp INT: Die entsprechende Spalte muss den Datentyp FIXED(n,m), FLOAT(n), INT oder SMALLINT besitzen. Die Tabelle darf in diesem Fall nur Zeilen enthalten, die in der Spalte ganzzahlige Werte im Bereich von –2147483648 bis 2147483647 enthalten.
Datentyp SMALLINT: Die entsprechende Spalte muss den Datentyp FIXED(n,m), FLOAT(n), INT oder SMALLINT besitzen. Die Tabelle darf in diesem Fall nur Zeilen enthalten, die in der Spalte ganzzahlige Werte im Bereich von –32768 bis 32767 enthalten.
Datentyp TIME: Die entsprechende Spalte muss den Datentyp CHAR(n), VARCHAR(n) oder TIME besitzen. Alle Zeilen der Tabelle müssen in der Spalte einen Wert enthalten, der einem Zeitwert in einem beliebigen vom Datenbanksystem unterstützten Zeitformat entspricht.
Datentyp TIMESTAMP: Die entsprechende Spalte muss den Datentyp CHAR(n), VARCHAR(n) oder TIMESTAMP besitzen. Alle Zeilen der Tabelle müssen in der Spalte einen Wert enthalten, der einem Zeitstempelwert in einem beliebigen vom Datenbanksystem unterstützten Zeitstempelformat entspricht.
Spaltenattribut NULL: In die entsprechende Spalte kann durch nachfolgende INSERT- oder UPDATE-Anweisungen ein NULL-Wert eingetragen werden.
Es sind nur folgende Spaltenattribute erlaubt:
●
NULL
NULL-Wert
●
NOT NULL
Wenn NOT NULL angegeben wird, darf die Tabelle
keine Zeile besitzen, die in der entsprechenden Spalte einen NULL-Wert
enthält. Ein NULL-Wert kann anschließend nicht mehr in die Spalte eingefügt
werden.
●
DEFAULT-Spezifikation
Die DEFAULT-Spezifikation DEFAULT SERIAL ist nicht zulässig.
Wenn eine DEFAULT-Spezifikation angegeben wird, dann ersetzt diese eine
gegebenenfalls existierende DEFAULT-Spezifikation der entsprechenden Spalte.
Die neue DEFAULT-Spezifikation hat keine Auswirkungen auf bereits existierende
Zeilen der Tabelle, sondern wird erst bei nachfolgenden INSERT-Anweisungen
wirksam.
Die Angabe einer MODIFY-Definition kann abhängig von der Art der Änderung dazu führen, dass die Tabelle umkopiert werden muss und/oder dass Indizes neu aufgebaut werden müssen. In diesen Fällen ist mit einer entsprechend langen Laufzeit zu rechnen.
Wenn die Tabelle umkopiert wird und die Tabelle als gelöscht markierte Spalten besitzt, dann werden diese aus dem Datenbankkatalog und den Zeilen der Tabelle entfernt und der Platzbedarf der Tabelle wird entsprechend reduziert.