insert Into

Jamous

Grünschnabel
hi, Bitte ich bruache eure Hilfe. :confused:
ich habe in Oracle DB eine Tabelle erzeugt, jetzt will ich die daten speichern aber vorher muss immer überprüft lassen, ob die Daten schon vorhanden ist falls ja dann nicht gepeichert wird sonst speichern.

IF NOT EXISTS (select * from tablename
where Tdate='22.08.2008')

INSERT INTO tablename
(Tdate, from, To, Daon)
values('22.08.2008' , 'KH', 'GU', '1,799')

dann bekomme ich diese Fehlermeldung :

Error starting at line 2 in command:
where Tdate='22.08.2008')
Error report:
Unknown Command
1 rows inserted

Frage 1 : obwohl die daten schon in der Tabelle existiert aber speichert trotzdem
scheint die If Bedinung nicht richtig funktioniert.
wie kann ich diese Problem losen.

Danke im Voraus.
 
Zuletzt bearbeitet:
Hi ZodiacXP, ich habe schon die 15 punkte nachgelesen.
sorry wenn ich dagegen gestoßen bin, aber habe schon in Archiv das Problem gesucht aber nicht gefunden.

jetzt meine Tdaten Struktur ist:

ID : Tdate : von : nach
1 : 12.08 : Ka : Man
2 : 12.08 : Mu : Fr

jetzt wenn ich noch mal insert mache

insert into Tdaten (Tdate, von , nach) values('12.08', 'Mu', 'Fr')
wird ein neue Zeile eingefügt obwohl eine schon existiert ist. so scheint meine Tabelle nachher


ID : Tdate : von : nach
1 : 12.08 : Ka : Man
2 : 12.08 : Mu : Fr
3 : 12.08 : Mu : Fr
 
Es ist zwar nicht gut Textfelder als Primary Key zu nutzen, aber wenn du "von" und "nach" zusätzlich als PRIMARY KEY setzt, dann wird SQL diesen Datensatz nicht doppelt anlegen (können/wollen).
 
Hi ZodiacXP, ich habe schon die 15 punkte nachgelesen.
sorry wenn ich dagegen gestoßen bin, aber habe schon in Archiv das Problem gesucht aber nicht gefunden.

jetzt meine Tdaten Struktur ist:

ID : Tdate : von : nach
1 : 12.08 : Ka : Man
2 : 12.08 : Mu : Fr

jetzt wenn ich noch mal insert mache

insert into Tdaten (Tdate, von , nach) values('12.08', 'Mu', 'Fr')
wird ein neue Zeile eingefügt obwohl eine schon existiert ist. so scheint meine Tabelle nachher


ID : Tdate : von : nach
1 : 12.08 : Ka : Man
2 : 12.08 : Mu : Fr
3 : 12.08 : Mu : Fr

- Hallo,

Wenn du nicht willst, dass der Wert eines Atrtributes mehrfach vorkommt, dann solltest du dies durch einen entsprechenden Constraint in der DB verhindern :

Code:
CREATE Unique INDEX TESTAPP.TDAT_UNIQUE_IDX ON TESTAPP.TDATEN
   (  TDATE ASC  ) 
/

oder auch :

Code:
ALTER TABLE TESTAPP.TDATEN ADD CONSTRAINT TDATE_UNIQUE
  UNIQUE (TDATE)
/

Bei einem Insert wirft die DB eine Exception, falls der Wert schon exisitert. Dies kannst du abfangen :

Code:
....
....Dein Insertcode hier
....
EXCEPTION
WHEN DUP_VAL_ON_INDEX 
THEN
...Mach was auch immer du in diesem Fall tun willst


Gruss
 
uniques hätte ich ihm auch geraten, wenn nicht die Möglichkeit bestehen würde, dass von-nach quasi eine "n-m-Beziehung" seien kann. Womit wir wieder dabei wären die ganze Sache zu normalisieren ;)
 
vielen Danke Ihr Beide, eure Rats hat mir geholfen, ich habe eine unique gemacht und richtige funktioniert.

vielen Danke:)
 
Zurück