Oracle insert timestamp - BIN/A. M. oder PM/P. M. erforderlich
Im SQL Developer die ich erstellt habe, ein export .sql-Datei, die (sehr große). Es enthält Hunderte von Einsätzen wie :
"Insert into SCHEMA.TABLE (
... ,
CREATEDATE,
MODIFIEDDATE,
....
)
values (
... ,
to_timestamp('20-AUG-12 01.09.53.271000000 AM','DD-MON-RR HH.MI.SS.FF AM'),
to_timestamp('20-AUG-12 01.09.53.271000000 PM','DD-MON-RR HH.MI.SS.FF PM'),
...
);"
Wenn ich es in SQL Developer, funktioniert es einwandfrei. Aber ich kann nicht importieren Sie ein bisschen .sql-Datei mit SQL-Entwickler (oder ich weiß nicht, wie es zu tun).
Wenn ich es mit SQL*Plus bekomme ich folgenden Fehler:
ORA-01855: AM/A. M. oder PM/P. M. erforderlich
Wenn ich entfernen Sie die AM/PM keywords einfügen, SQL*Plus können Sie auf Zeile einfügen, mit Ihnen kein Glück. Was ist das problem mit AM /PM?
Hier ist der genaue insert-Befehl:
Insert into SCHEMA.TABLE(
ENTRYID,GROUPID,COMPANYID,USERID,USERNAME,CREATEDATE,MODIFIEDDATE,
CLASSNAMEID,CLASSPK,CLASSUUID,VISIBLE,STARTDATE,ENDDATE,PUBLISHDATE,
EXPIRATIONDATE,MIMETYPE,TITLE,DESCRIPTION,SUMMARY,URL,HEIGHT,WIDTH,
PRIORITY,VIEWCOUNT
) values (
11902,11005,10136,10178,'Test Test',
to_timestamp('20-AUG-12 01.09.53.271000000 AM','DD-MON-RR HH.MI.SS.FF AM'),
to_timestamp('20-AUG-12 01.09.53.271000000 PM','DD-MON-RR HH.MI.SS.FF PM'),
10076,11900,'AAA',1,null,null,null,null,null,
'ABC','XyZ',null,null,0,0,0,2563
);
Es sollte kein problem sein mit AM/PM einfügen, dass
Kann man nach einer Probe von Daten aus der SQL-Datei? Ist es immer der
Huh, stellt sich heraus, dass die meridian-Kennzeichen NLS-empfindlich. Was bedeutet
to_timestamp()
Aufruf in eine Tabelle mit einem timestamp
Spalten funktioniert in SQLPlus. Die AM/PM-literal-Werte sind nicht betroffen durch die NLS-Einstellungen so weit ich bewusst bin, also denke ich nicht, dass könnte das Problem sein. Ich nehme an, Sie haben geschrieben *genau, was Sie gerade ausgeführt; der vollständige Befehl ohne geänderten Namen geben würde, ein bisschen mehr Vertrauen, obwohl, zusammen mit der geänderten version, die funktioniert. Was ist das problem mit SQL-Entwickler; Sie können öffnen Sie eine Skript-Datei und dann "run script"?Kann man nach einer Probe von Daten aus der SQL-Datei? Ist es immer der
'DD-MON-RR HH.MI.SS.FF AM'
format für Uhrzeiten oder ist es immer/manchmal 'DD-MON-RR HH24.MI.SS.FF'
?Huh, stellt sich heraus, dass die meridian-Kennzeichen NLS-empfindlich. Was bedeutet
select value from nls_session_parameters where parameter = 'NLS_DATE_LANGUAGE'
geben Sie in SQL*Plus? Hoffentlich nicht in Englisch, und Slowakisch wäre eine gute Antwort...
InformationsquelleAutor Mato.Duris | 2013-12-20
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die einzige unmittelbare Möglichkeit, die ich sehen kann, zu reproduzieren, ist eine Veränderung der NLS-Einstellungen; aber nicht
NLS_LANGUAGE
wie beeinflussen die Fehlermeldung auch. Mit Englisch ist OK, wie man es erwarten würde:Änderung nur die
NLS_DATE_LANGUAGE
reproduziert Ihre Fehler:Ändern
NLS_LANGUAGE
direkt oder durch etwas beeinflusst, würde die Fehlermeldung anders Aussehen, als gut:Brauchen Sie eine Sprache, die noch erkennt
AUG
als einen Monat gültig, aber nicht mitAM
/PM
; Slowakische scheint zu passen die Rechnung, so dass ich denke, das könnte sein, wo du herkommst. Andere Sprachen können das gleiche zu tun. Etwas seltsam, dass die Fehlermeldung, wennNLS_LANGUAGE
noch zeigt AM/PM, aberto_char(sysdate, 'HH AM')
zeigt an, dass die Nachricht falsch ist. Mit nurNLS_DATE_LANGUAGE
legen Sie die Nachricht in Englisch sowieso (versuchen Sie es mit türkischen, zum Beispiel, aber würden Sie ändern den Namen des Monats oder switch verwenden Monat zahlen) und es zeigt sich immer AM/PM.Wenn das passiert, ändern Sie entweder die
NLS_DATE_LANGUAGE
auf Englisch, bevor dieses Skript ausgeführt wird; oder ändern Sie Ihre SQL-Developer-Einstellungen zu verwenden, Slowakisch (oder was auch immer Sie tatsächlich verwenden), bevor Sie den export - das hätte hoffentlich den export verwendenDOPOLUDNIE
/POPOLUDNIE
, aber es wäre nicht vollständig mich überraschen, wenn es nicht; oder ändern Sie den SQL DeveloperNLS_TIMESTAMP_FORMAT
24-Stunden-Zeit (und eine 4-stellige Jahr und Monat zahlen statt Namen), die für die Ausfuhr, das würde vermeiden das Thema ganz. Oder führen Sie das Skript aus SQL Developer, natürlich.InformationsquelleAutor Alex Poole
Alex ' s Antwort beschreibt das problem sehr gut; es gibt eine einfachere Lösung, obwohl, wenn Sie sind in der Lage, ändern Sie Ihre generierten insert-statements etwas.
TO_TIMESTAMP()
hat einen Dritten parameter können Sie angeben, die NLS_DATE_LANGUAGE in der Beilage selbst.Nicht, dann müssen ändern Sie das Datum-Sprache für die Sitzung, oder ändern Sie es zurück danach.
Ich weiß gar nicht, @Alex... ich würde hoffen, dass Oracle ' s tools, die Ihnen erlauben würde, Oracle, aber ich war falsch, dass in der Vergangenheit :-).
InformationsquelleAutor Ben
Ohne irgendwelche Daten zu sehen ich kann nicht sicher sein, aber es Klang wie Ihre "großen SQL-Datei" nicht immer (oder manchmal), haben die Zeitstempel in das format, das Sie erwarten und ist nicht mit
AM
oderPM
.Versuchen, mit einem 24-Stunden-Uhr statt
AM
oderPM
und sehen, ob das zu den Daten passt in die "großen SQL-Datei":InformationsquelleAutor MT0