PDA

View Full Version : Finde Fehler bei SQL nich...



Seiten : [1] 2

deni87991
08-08-06, 10:17
Hallo!

Hier mal wieder ein neues Problem:

Ich lerne grad SQL und wollt mir eine Beispieltabelle anlegen. 4Spalten inkl. Datumsfeld. Nach dem CREATE Table will ich gleich n INSERT INTO machen und laufe da auf folgenden Fehler:


SQL7905 20 1 Position 1 Tabelle TEST21QL in GEISLER erstellt, Tabelle konnte jedoch nicht im Journal aufgezeichnet werden.

SQL0104 30 11 Position 59 Token , ungültig. Gültige Token: <ENDE DER ANWEISUNG>.
SQL7961 0 ROLLBACK beendet.

Die genannte Fehlerhafte Zeile ist unten...was läuft bei dem Datumsfeld falsch?
Definiert ist es folgendermaßen:
DATUM DATE NOT NULL WITH DEFAULT '0001-01-01');


0011.00 VALUES ('KATZE', 1, 2, 'SCHWARZ UND BUNT','20051205'),

Fuerchau
08-08-06, 10:22
Das Datum muss im ISO-Format übergeben werden:

VALUES ('KATZE', 1, 2, 'SCHWARZ UND BUNT','2005-12-05')

Das Komma am Ende muss weg, da mit Klammer-Zu das Statement beendet ist.

deni87991
08-08-06, 10:34
Mit den verschiedenen Datenformaten hab ich etwas rumgespielt aber hatte nie was gebracht.

Das Komma hinter der Klamma steht da, weil ich gleich mehrere Values hinzufügen will und da stand im handbuch, man solle es per ',' trennen...im Ganzen sieht das also so aus

INSERT INTO GEISLER.TEST2SQL
(NAME, EINTRAGSNR, ANZAHL, BEMERKUNG, DATUM)
VALUES ('KATZE', 1, 2, 'SCHWARZ UND BUNT','2005-12-05')
('PFERD', 6, 1, 'GROSS UND BREIT','07.12.2005')
('HUND', 2, 4, 'ANGST','2006-07-10')
('MAUS', 5, 2, 'GRAU UND BRAUN', '2006-08-08')
('VOGEL', 3, 1,' DOOF', '2006-08-07')
('BAER', 4, 5, 'LIEB UND SUESS', '2006-08-15');


Lasse ich nun die kommas weg, dann krieg ich nen neuen Fehler; mache ich es mit Komma, kommt der "alte"Fehler

SQL0104 30 11 Position 61 Token , ungültig. Gültige Token: <ENDE DER
ANWEISUNG>.
SQL7961 0 ROLLBACK beendet.

Fuerchau
08-08-06, 11:15
Mehrere Zeilen mit einem Insert funktioniert interaktiv nicht bzw. wird nicht unterstützt.

Also: Pro Satz ein eigener Insert !

B.Hauser
08-08-06, 12:24
Mehrere Zeilen mit einem Insert funktioniert interaktiv nicht bzw. wird nicht unterstützt.


Wie kommst Du schon wieder auf dieses schmale Brett?
Auch interaktiv können ab Release V5R3M0 mehrere Zeilen auf einmal eingefügt werden. (Auch ohne Sub-Select!)

Das folgende Beispiel funktioniert unter V5R3M0:


CREATE TABLE MySchema.TEST
(NAME CHAR (10 ) NOT NULL WITH DEFAULT,
ZAHL INTEGER NOT NULL WITH DEFAULT,
DATUM DATE NOT NULL WITH DEFAULT);

insert into MySchema.Test
(Name, Zahl, Datum)
Values('Meier', 123, '2006-08-01'),
('Schulze', 45678, '10.08.2006');


Birgitta

Fuerchau
08-08-06, 12:56
Ich habe immer noch Kunden, die mit V5R1 oder sogar V4R5 und V4R3 arbeiten.
Wo ist der kleinste gemeinsame Nenner ?

Man könnte auch immer gleich mit "In V5R4 gehts doch auch" und "mit V5R5 kommts auf jeden Fall" antworten, aber helfen tut's nicht.

Da bewege ich mich (meistens) doch lieber auf der sicheren Seite ;)

PS:
Da das Komma als fehlerhaft abgewiesen wurde, liegt zumindestens NICHT V5R3 vor.

deni87991
08-08-06, 13:11
Also ich wollte keinen Streit provozieren...ich bin über jede Hilfe dankbar.

So...um diesmal auszuschließen, das es an mir liegt, hab ich die Commands nur kopiert-->

1
2 CREATE TABLE GEISLER.TESTSQL
3 (NAME CHAR (10 ) NOT NULL WITH DEFAULT,
4 ZAHL INTEGER NOT NULL WITH DEFAULT,
5 DATUM DATE NOT NULL WITH DEFAULT);
6
7 INSERT INTO MYSCHEMA.TEST
8 (NAME, ZAHL, DATUM)
9 VALUES('MEIER', 123, '2006-08-01'),
10 ('SCHULZE', 45678, '10.08.2006');

und wollte dann mit RS die Sache wandeln: WIEDER triff folgender Fehler auf:
SQL0104 30 9 Position 35 Token , ungültig. Gültige Token: <ENDE DER
ANWEISUNG>.

Das triffe mal wieder genau die Datumsangabe:
Habe es ausprobiert mit '2006-08-01' und mit '2006.08.01' - der Fehler bleibt aber gleich

Fuerchau
08-08-06, 13:15
Also hast du noch kein V5R3 !!!!
Und damit kannst du in einem Insert nur 1 Zeile einfügen.

Der Fehler weist doch darauf hin, dass in Zeile 9, Stelle 35 das Komma nicht erwartet wird sondern das "Ende der Anweisung" !

deni87991
08-08-06, 13:23
Hm, wenn du meist (bin zwar eigentlich ziemlich davon übrezeugt aber du kennst dich besser aus).

Ich hab die VALUES jetzt also getrennt.

1
2 CREATE TABLE GEISLER.TESTSQL
3 (NAME CHAR (10 ) NOT NULL WITH DEFAULT,
4 ZAHL INTEGER NOT NULL WITH DEFAULT,
5 DATUM DATE NOT NULL WITH DEFAULT);
6
7 INSERT INTO GEISLER.TESTSQL
8 (NAME, ZAHL, DATUM)
9 VALUES('MEIER', 123, '2006.08.01'),
10 VALUES('MUELL', 587, '10.08.2006');


Es entsteht folgender Fehler:
SQL0104 30 9 Position 35 Token , ungültig. Gültige Token: <ENDE DER
ANWEISUNG>.

Fuerchau
08-08-06, 13:27
Probier doch dieses aus:

1
2 CREATE TABLE GEISLER.TESTSQL
3 (NAME CHAR (10 ) NOT NULL WITH DEFAULT,
4 ZAHL INTEGER NOT NULL WITH DEFAULT,
5 DATUM DATE NOT NULL WITH DEFAULT);
6
7 INSERT INTO GEISLER.TESTSQL
8 (NAME, ZAHL, DATUM)
9 VALUES('MEIER', 123, '2006-08-01');

7 INSERT INTO GEISLER.TESTSQL
8 (NAME, ZAHL, DATUM)
10 VALUES('MUELL', 587, '2006-08-10');

Wenn ich mich nicht verzählt habe (laut deiner Quelle) ist Stelle 35 genau das Komma nach der Klammer-Zu !