ORA-00933: SQL-Befehl wurde nicht korrekt beendet

Hallo!!!

Ich bekomme bei folgendem sql string diese fehlermeldung wenn ich ihn auf der DB absetzen will:

UPDATE KONTAKT SET FIRMENNAME= der dudu, FIRMENNAME2= null, ANREDE= null, TITEL= null, TITELZUSATZ= dr, NAMENSVORSATZ= null, NAMENSZUSATZ= null, NAME= superman, VORNAME= superman, GEBURTSDATUM= 03.12.1980, FAMILIENSTAND= nicht angegeben, KONTAKTTYP= nicht angegeben, INTLAENDERCODE= null, INTLAENDERCODE2= , NATVORWAHL= , NATVORWAHL2= , TELNUMMER= , TELNUMMER2= , DURCHWAHL= , DURCHWAHL2= , MOBILEINTLAENDERCODE= , MOBILEINTLAENDERCODE2= , MOBILENATVORWAHL= , MOBILENATVORWAHL2= , MOBILENUMMER= , MOBILENUMMER2= , FAXINTLAENDERCODE= , FAXNATVORWAHL= , FAXNUMMER= , FAXDURCHWAHL= , EMAIL= , HTTP= , FACEBOOK= , TWITTER= , XING= , MESSENGERTYPE= , MESSENGERADRESSE= WHERE KEY = 183

Könnt ihr mir bitte weiterhelfen, ich weis nicht mehr weiter, meiner meinung nach ist die syntax richtig aber offensichtlich täusch ich mich, komm nicht mehr weiter!!!

was mir komisch vorkommt ist z.b.

FIRMENNAME= der dudu,

seit wann muss man ein string nicht in ’ fassen ?

FIRMENNAME= ‚der dudu‘,

aber vielleicht ist das ja bei deinem Syntax anders , würd mich aber wundern .

und auch kenn ich kein

MESSENGERTYPE= ,

sondern eher sowas wie

MESSENGERTYPE = ‚‘ ,

>>>

Na ja, da ist so ziemlich alles falsch, aber egal. Würde dir folgendes vorschlagen :

http://download.oracle.com/docs/cd/B19306_01/server

  • Strings müssen ausgezeichnet werden : …FIRMENNAME= ‚der dudu‘…
  • ebenfalls Datumswerte : GEBURTSDATUM= ‚03.12.1980‘, falls dies ein DateTime Attribut ist, besser wäre natürlich der komplette Datumsformat String
  • Sowas geht gar nicht : MOBILENATVORWAHL= ,
  • Ausserdem fehlt das ; am Schluss

Gruss

Es heist ja in der doku von oracle

update set =, … , =
where ;

Bei messengertype steht in der java klasse hald einfach ein leerzeichen, deshalb steht da messengertype= , wenn messengertype null zurückliefern würde(in der javaklasse) würde da messengertype=null stehen, akzeptiert die oracle db kein einzelnes leerzeichen?

ich werde eure tips jetzt mal probieren, vielen dank!!!

aja,
der geburtsdatumswert ist ein string

OK Leute, vielen vielen vielen vielen Dank,
es waren die ‚‘, ich wusste nicht das ich strings so auszeichnen muß,

ist mein 2ter tag mit sql!!!

aja,
der geburtsdatumswert ist ein string

SQL hat keine probleme wenn du alle werte in anführungszeichen setzt.
Die Datenbank kennt ihre Typen und packt auch ein ‚6.00‘ als dezimal hinein und nicht als string (geht ja nicht feld ist ja typ dezimal).

= ‚Datumstring‘ -> DATE
= ‚Zahl.ZahlZahl‘ -> DEZIMAL
= ‚viele Zeichen‘ -> VARCHAR / TEXT

SQL hat keine probleme wenn du alle werte in anführungszeichen
setzt.
Die Datenbank kennt ihre Typen und packt auch ein ‚6.00‘ als
dezimal hinein und nicht als string (geht ja nicht feld ist ja
typ dezimal).

Hi,

Das wäre mir neu :smile:

CREATE TABLE TEST
(Zahl NUMBER)
/

INSERT INTO test (zahl) VALUES (‚6.00‘)
/

–> line 1: ORA-01722: Ungültige Zahl

INSERT INTO test (zahl) VALUES (6.00)
/

1 row(s) inserted

Gruss

Da haben wir ein unterschied bei oracel und mysql .
MySQL nimmt da alles und macht es dann kontext richtig.

danke für die Info .

Da haben wir ein unterschied bei oracel und mysql .
MySQL nimmt da alles und macht es dann kontext richtig.

danke für die Info .

MYSQL dezimal insert

INSERT INTO einkauf.einkauf (
idx ,
uid ,
pidx ,
verkaufstelle ,
preis ,
datum ,
info
)
VALUES (
NULL , ‚99‘, ‚99‘, ‚‘, ‚6.00‘, ‚‘, ‚‘
);

1 Zeile(n) eingefügt.
ID der eingefügten Zeile: 102 ( die Abfrage dauerte 0.0005 sek. )

Unschön…

Hallo Iacta,
ganz so simpel ist es dann doch nicht - Oracle verwendet bei der impliziten Konvertierung die Session-lokalen NLS-Einstellungen. Wenn du die Zahl mit einem Dezimalkomma (’,’) anstelle eines Punktes insertest, wird es auch funktionieren (aufgrund der deutschen Fehlermeldung vermute ich mal, dass bei die das Komma als Dezimaltrennzeichen eingestellt ist).

Simples Beispiel (man beachte den Parameter ‚NLS_NUMERIC_CHARACTERS‘):

SQL\> create table xxx (id number);

Tabelle wurde erstellt.


SQL\> select \* from NLS\_SESSION\_PARAMETERS;

PARAMETER VALUE
------------------------------ ----------------------------------------
NLS\_LANGUAGE AMERICAN
NLS\_TERRITORY AMERICA
NLS\_CURRENCY $
NLS\_ISO\_CURRENCY AMERICA
NLS\_NUMERIC\_CHARACTERS .,
NLS\_CALENDAR GREGORIAN
NLS\_DATE\_FORMAT DD-MON-RR
NLS\_DATE\_LANGUAGE AMERICAN
NLS\_SORT BINARY
NLS\_TIME\_FORMAT HH.MI.SSXFF AM
NLS\_TIMESTAMP\_FORMAT DD-MON-RR HH.MI.SSXFF AM

PARAMETER VALUE
------------------------------ ----------------------------------------
NLS\_TIME\_TZ\_FORMAT HH.MI.SSXFF AM TZR
NLS\_TIMESTAMP\_TZ\_FORMAT DD-MON-RR HH.MI.SSXFF AM TZR
NLS\_DUAL\_CURRENCY $
NLS\_COMP BINARY
NLS\_LENGTH\_SEMANTICS BYTE
NLS\_NCHAR\_CONV\_EXCP FALSE

17 Zeilen ausgewählt.


SQL\> insert into xxx values ('6.0');
insert into xxx values ('6.0')
 \*
FEHLER in Zeile 1:
ORA-01722: Ung³ltige Zahl

SQL\> insert into xxx values ('6,0');

1 Zeile wurde erstellt.

SQL\>

gruss
bernhard

Hallo Iacta,
ganz so simpel ist es dann doch nicht - Oracle verwendet bei
der impliziten Konvertierung die Session-lokalen
NLS-Einstellungen. Wenn du die Zahl mit einem Dezimalkomma
(’,’) anstelle eines Punktes insertest, wird es auch

Du verwechselst mich mit ulrich , der hat den oracle :smile:

Ok aber warum bekommt er mit

insert xxx value (6.0) auch einen wert hinein ?
oder werden nur strings mit dem schema convertiert.

Also mein zrsprüngliches problem hat sich ja erledigt, schuld war das ich nicht an die hochkomma gedacht habe, jetzt habe ich ein weiteres (syntax) problem / frage,
ich möchte prüfen ob ein datensatz mit einer eindeutigen id bereits in der Tabelle vorhanden ist, wenn ja möchte ich updaten, wenn nein soll ein insert gemacht werden, müßte doch irgendwie mit dem merge statement gehen oder? jerdoch ist mir dann der aufbau dieses statements unklar!!!

gruß
christian

MERGE INTO test1 a
USING all_objects b
ON (a.object_id = b.object_id)
WHEN MATCHED THEN
UPDATE SET a.status = b.status
WHEN NOT MATCHED THEN
INSERT (object_id, status)
VALUES (b.object_id, b.status);

Also ungefähr so:

MERGE INTO MEINE TABELLE
USING
ON
WHEN MATCHED THEN
UPDATE SET =,…WHERE ID =
WHEN NOT MATCHED THEN
INSERT INTO (spaltennamen)

unklar ist mir was in die zeile USING und ON kommen soll,

sorry für die vielen blöden fragen, aber ich bin noch nicht so lange im geschäft, ich lerne gerade java und muß jetzt für ein projekt oracle SQL verwenden womit ich davor noch nie etwas zu tun gehabt habe!!!