-
ALTER TABLE ... NOT NULL
Hallo,
Bei folgendem SQL-Statement erhalte ich eine Fehlermeldung (verwendete OS V5R2M0):
alter table testtable add col1 varchar(50) NOT NULL
Die Fehlermeldung lautet:
Error: [IBM][iSeries Access ODBC-Treiber][DB2 UDB]SQL0109 - Klausel NOT NULL unzulässig.
In der Tat steht in den SQL-References folgender Text:
Specifies null as the default for the column. If NOT NULL was specified,
DEFAULT NULL must not be specified within the same column-definition.
Verwirrend ist jedoch, dass ich eine create table oder ein alter column ohne DEFAULT-Eigenschaft ausführen kann.
Führe ich den alter table .. add column falsch aus oder hat mir irgendwer noch ein Tip dazu?
Vielen Dank
Daniel
-
Hallo Daniel,
beim Anlegen einer Tabelle ist ein Default-Wert nicht erforderlich, da zu diesem Zeitpunkt in der Tabelle noch keine Sätze vorhanden sind.
Beim Hinzufügen einer Spalte zu einer bestehenden Tabelle wird davon ausgegangen, dass in der Tabelle bereits Sätze angelegt wurden. Da bei "NOT NULL" NULL als Unterlassungswert nicht zulässig ist, muss ein Defaultwert angegeben werden, damit die bereits bestehenden Sätze in der neuen Spalte mit einem Wert initialisiert werden können.
Aus diesem Grund muss beim Alter Table immer NOT NULL WITH DEFAULT angegeben werden.
Wenn Du übrigens über die Hilfe die Detail-Nachrichten von SQL0109 angeschaut hättest oder über die Messagefile den Detail-Text von Message-Id SQL0109 angezeigt hättest, hättest Du den folgenden Kommentar sehen müssen:
-- Die Klausel NOT NULL ist in der Definition einer Spalte, die zu einer Tabelle hinzugefügt wird, nicht zulässig, es sei denn, es ist ein Standardwert angegeben.
Birgitta
-
Schau dir mal mit dem i5/OS Command :
Code:
DSPMSGD RANGE(SQL0109) MSGF(QSQLMSG)
die komplette Fehlermeldung an. Hier findest du deine Antwort :
Code:
...
-- Die Klausel NOT NULL ist in der Definition einer Spalte, die zu einer
Tabelle hinzugefügt wird, nicht zulässig, es sei denn, es ist ein
Standardwert angegeben.
...
Man darf nicht mal 10 Minuten was anderes machen.
Da war die Birgitta wieder schneller. ;-)
-
ALTER TABLE ... NOT NULL
Hallo Birgitta,
Vielen Dank für die Antwort.
Dass ein alter table add column mit NOT NULL nicht einfach auf eine "gefüllte" Tabelle losgelassen werden kann ist einleuchtend. In diesem Fall wird jedoch der Alter Table auf ein "leere" Tabelle ausgeführt.
Da das Verhalten bei Inserts mit NOT NULL WITH DEFAULT anderst ist als ohne Standartwerte kann ich die Option leider nicht anwenden (etwas komplexerer Hintergrund).
Wie gesagt kann ich folgende Beispielstatements anwenden:
1. alter table testtable add col1 varchar(50)
2. alter table testtable alter col1 set not null
Und das fehlerfrei ...
Elegant wäre es natürlich, wenn das alles in einem Statement (z. Bsp. "alter table testtable add col1 varchar(50) not null") definiert werden kann. Kann ich somit davon ausgehen, dass die AS/400 diese Option "noch" nicht unterstützt.
Viele Grüsse
Daniel
-
Zitat von Sven Schneider
Man darf nicht mal 10 Minuten was anderes machen.
Da war die Birgitta wieder schneller. ;-)
Klein und flink ;-)
SCNR,
-h
-
@Sven
... das sieht ja fast aus, aus würden wir nur darauf lauern, dass irgendjemand eine Frage stellt und wir uns darum prügeln müssen wer zuerst antworten darf
@Holger
... besser klein und zackig als groß und dappig
@Daniel
... die Variante, die Du gerne hättest wird wahrscheinlich nie unterstützt werden. Einfach weil es weder SQL Standard, noch sauber und zu fehleranfällig ist. So wie es jetzt implementiert ist, ist es leicht zu erklären und einsichtig. Zu erklären warum das gleiche Statement einmal funktioniert (leere Tabelle) und einmal nicht (gefüllte Tabelle) ist viel schwieriger. Außerdem würde dann gleich der nächste angekleckert kommen und verlangen, dass das auch für gefüllte Tabellen gehen muss (was nicht möglich ist).
Birgitta
Similar Threads
-
By Matthias182 in forum IBM i Hauptforum
Antworten: 3
Letzter Beitrag: 03-12-07, 12:05
-
By Ewald in forum NEWSboard Programmierung
Antworten: 0
Letzter Beitrag: 25-01-07, 07:52
-
By deni87991 in forum IBM i Hauptforum
Antworten: 1
Letzter Beitrag: 04-08-06, 10:32
-
By Kampi4 in forum NEWSboard Programmierung
Antworten: 13
Letzter Beitrag: 25-11-05, 07:37
-
By woki in forum NEWSboard Programmierung
Antworten: 2
Letzter Beitrag: 13-04-04, 12:09
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- You may not post attachments
- You may not edit your posts
-
Foren-Regeln
|
Erweiterte Foren Suche
Google Foren Suche
Forum & Artikel Update eMail
AS/400 / IBM i
Server Expert Gruppen
Unternehmens IT
|
Kategorien online Artikel
- Big Data, Analytics, BI, MIS
- Cloud, Social Media, Devices
- DMS, Archivierung, Druck
- ERP + Add-ons, Business Software
- Hochverfügbarkeit
- Human Resources, Personal
- IBM Announcements
- IT-Karikaturen
- Leitartikel
- Load`n`go
- Messen, Veranstaltungen
- NEWSolutions Dossiers
- Programmierung
- Security
- Software Development + Change Mgmt.
- Solutions & Provider
- Speicher – Storage
- Strategische Berichte
- Systemmanagement
- Tools, Hot-Tips
Auf dem Laufenden bleiben
|
Bookmarks