in einer Prozedur (Oracle 9i) lese ich in einer Schleife eine PL/SQL-Tabelle
aus und
schreibe die Daten mittels INSERT INTO in eine Tabelle.
Das klappt in der Pozedur in anderen Fällen problemlos. Nur in diesem Fall
kommt immer
die ORA-00917 Fehlermeldung. Die Anzahl der benannten Spalten stimmt mit der
Anzahl
der einzufügenden Daten überein und ein fehlendes Komma kann ich beim besten
Willen
nicht entdecken. Die verwendeten Variablen sind alle korrekt definiert usw.
und werden
schon früher in der Prozedur korrekt verarbeitet.
Nun denke ich, dass diese Fehlermeldung eventuell von einem anderen Fehler
verursacht wird.
Kann das sein, und wenn ja in welcher Richtung muss ich dann suchen??
Im Voraus Danke
Reinhard
> Kann das sein, und wenn ja in welcher Richtung muss ich dann suchen??
Erster Fehler, der mit einfällt: Maskierst Du in VARCHAR2- bzw.
CHAR-Felder auftretende ' richtig?
19:44:44 ABA_ABA9OLTP>create table temp (a number,b varchar2(30));
Tabelle wurde angelegt.
19:45:30 ABA_ABA9OLTP>insert into temp values (1,'Hase und'Igel);
insert into temp values (1,'Hase und'Igel)
*
FEHLER in Zeile 1:
ORA-00917: Komma fehlt
19:45:43 ABA_ABA9OLTP>insert into temp (a,b) values (1,'Hase und'Igel);
insert into temp (a,b) values (1,'Hase und'Igel)
*
FEHLER in Zeile 1:
ORA-00917: Komma fehlt
cu
Andreas
Oracle kommt z.B. mit Strings die ein ' enthalten nicht klar. Für Oracle ist
da dann der Text zu Ende, was ja auch richtig ist, und danach muss ein Komma
folgen.
Ich benutze daher immer selber erzeugte INSERT-Scripts die aus einem ' eben
||CHAR(39)|| machen. Das geht immer.
Ähnliche Probleme gibt es teilweise mit Zeichen grösser 127 oder kleiner 32.
Ein weiteres Problem ist das &-Zeichen.
--
Stefan Graf
> Ich benutze daher immer selber erzeugte INSERT-Scripts die aus einem ' eben
> ||CHAR(39)|| machen. Das geht immer.
>
> Ähnliche Probleme gibt es teilweise mit Zeichen grösser 127 oder kleiner 32.
Das sehe ich ja vielleicht noch ein.
> Ein weiteres Problem ist das &-Zeichen.
huups, warum das denn? Und wie behandelt man dann HTML-Texte, die man
abspeichern will und in denen explizit z.B. < in < etc umgesetzt
worden ist?
Gruß, Det
Die Datenbank kann es problemlos speichern und man kann solche String auch
mit SELECT wieder auslesen. Das Problem besteht nur beim INSERT mit SQLPLUS.
Das &-Zeichen interpretiert SQLPLUS als Aufforderung einen Wert von der
Console einzulesen.
--
Stefan Graf
Reinhard
"Andreas Ballenthin" <ball...@gmx.de> schrieb im Newsbeitrag
news:3E25AC98...@gmx.de...
Reinhard
"Stefan Graf" <stefa...@bigfoot.com> schrieb im Newsbeitrag
news:b04b7t$lf0rr$1...@ID-10144.news.dfncis.de...
danke für Eure Mühe.
Der Fehler war eine fehlende Klammer in einer geschachtelten
to_char(trunc( ) ) Formulierung.
Reinhard
ps. Da sucht man nach Kommas und Oracle meine eigentlich
Klammern.
<<seufz>>
"Reinhard Seiler" <reinhar...@lua.sms.sachsen.de> schrieb im
Newsbeitrag news:b03pk6$t0r$1...@S0DD0010.ihl.sachsen.de...
vielleicht beim nächsten Mal den fraglichen Code gleich mitliefern?
Du hättest die Lösung bestimmt schneller gehabt.
Grüßt: Guido
"Reinhard Seiler" <reinhar...@lua.sms.sachsen.de> schrieb im
Newsbeitrag news:b05qsv$9ba$1...@S0DD0010.ihl.sachsen.de...
das ist wohl wahr.
Reinhard
"Guido Konsolke" <Kons...@triaton.com> schrieb im Newsbeitrag
news:10427087...@news.thyssen.com...
Hallo Stefan,
ganz so ist es nicht. Das & ist das Kennzeichen für eine
SQL*Plus-Variable. Wenn diese bei Erkennen nicht gesetzt ist,
erscheint eine Eingabeaufforderung. Die Variable wird dann für genau
dieses Auftreten gesetzt, beim nächsten Auftreten fragt SQL*Plus
wieder, es sei denn man benutzt &&, dann bleibt die Variable gesetzt.
Das & kann man aber auch ersetzen durch andere ggf. günstigere
Zeichen:
< verdi_takt:ort1@ > DEFINE PATHVAR
DEFINE PATHVAR = "d:\temp\" (CHAR)
< verdi_takt:ort1@ > select '&PATHVAR' from dual;
'D:\TEMP
--------
d:\temp\
< verdi_takt:ort1@ > set define #
< verdi_takt:ort1@ > select '&PATHVAR' from dual;
'&PATHVA
--------
&PATHVAR
< verdi_takt:ort1@ > select '#PATHVAR' from dual;
'D:\TEMP
--------
d:\temp\
hth
Kay
Hallo Kathinka,
danke für die Tipps. Ich werde versuchen, mich zu bessern.
Ich hoffe, diesmal war das Ganzzitat angemessen 8-))
Grüßt: Guido