SQL Fehler: ungültige Eingabesyntax für Typ timestamp: »«

Fragen und Probleme rund um die Abfragespache SQL.
Antworten
JSpatz
Benutzer
Beiträge: 65
Registriert: Fr 19. Mai 2006, 13:58

SQL Fehler: ungültige Eingabesyntax für Typ timestamp: »«

Beitrag von JSpatz » So 31. Mär 2019, 19:38

Hi zusammen,

ich habe ein ganz seltsames Verhalten in unserem Projekt:
Ich habe folgendes SqlStatement in unserem Projekt verwendet:

Code: Alles auswählen

SELECT out_sum, out_sum_1 
from 
  sc_SEL_BESTWERT_GESLIEFLAGER( 
  cast( :1 as INTEGER), 
  cast( :2 as INTEGER), 
  cast( :3 as INTEGER), 
  cast( :4 as TIMESTAMP WITHOUT TIME ZONE))
:1 bis :4 sind Bind Variablen, die beim Aufruf durch entsprechende Werte ersetzt werden. Es läuft bei allen Kollegen bin auf einem. Bei ihm bekomme ich die Fehlermeldung

2019-03-15 16:39:27.468 CET [2936] FEHLER: ungültige Eingabesyntax für Typ timestamp: »«
2019-03-15 16:39:27.468 CET [2936] ANWEISUNG: SELECT out_sum, out_sum_1 from sc_SEL_BESTWERT_GESLIEFLAGER( cast( $1 as INTEGER), cast( $2 as INTEGER), cast( $3 as INTEGER), cast( $4 as TIMESTAMP WITHOUT TIME ZONE))

Wobei in dem Parameter ein gültiges Datum drinsteht. Es handelt sich um die gleiche Exe, die postgresql.conf sind (bis auf die Pfade) identisch (Die Datenbanken sind lokal) und wenn ich die Datenbank dieses Kollegen mit Backup sichere und bei mir einspiele geht es ohne Problem.

Der gleiche Fehler kommt auch wenn ich Werte einsetze und das Statement ausführe:

Code: Alles auswählen

SELECT out_sum, out_sum_1 
from 
  sc_SEL_BESTWERT_GESLIEFLAGER( 
  cast( 3 as INTEGER), 
  cast( 1 as INTEGER), 
  cast( 0 as INTEGER), 
  cast( '' as TIMESTAMP WITHOUT TIME ZONE))
Was ja auch korrekt ist, aber wie gesagt, das Feld ist beim Debuggen nicht leer.

Code: Alles auswählen

SELECT out_sum, out_sum_1 
from 
  sc_SEL_BESTWERT_GESLIEFLAGER( 
  cast( 3 as INTEGER), 
  cast( 1 as INTEGER), 
  cast( 0 as INTEGER), 
  cast( '31.12.2018' as TIMESTAMP WITHOUT TIME ZONE))
funktioniert einwandfrei.

Folgendes System:
Win10,
Entwicklungsumgegung Gupta Team Developer,
PG 10.5 oder 10.7
Zugriff über ODBC

Inzwischen arbeite ich schon über 12 Jahre mit der PG, kenne mich also etwas aus, aber so etwas hatte ich noch nie ???

Hat Irgendjemand noch eine Idee oder einen Ansatzpunkt, woran das liegen könnte?
Ich bin für jeden Hinweis dankbar.

pogomips
Erfahrener Benutzer
Beiträge: 100
Registriert: Fr 18. Nov 2016, 09:55

Re: SQL Fehler: ungültige Eingabesyntax für Typ timestamp: »«

Beitrag von pogomips » So 31. Mär 2019, 19:50

Prüf mal die Locale Settings, die könnten unterschiedlich sein.

Oder mach es direkt mit Formatmaske:
SELECT TO_TIMESTAMP('2017-03-31 9:30:20','YYYY-MM-DD HH:MI:SS');

JSpatz
Benutzer
Beiträge: 65
Registriert: Fr 19. Mai 2006, 13:58

Re: SQL Fehler: ungültige Eingabesyntax für Typ timestamp: »«

Beitrag von JSpatz » Mo 1. Apr 2019, 22:52

Hi, vielen Dank für die Antwort,

die Local Settings sind identisch, das war auch mein erster Gedanke:

Code: Alles auswählen

lc_messages = 'German_Germany.1252'			# locale for system error message
					# strings
lc_monetary = 'German_Germany.1252'			# locale for monetary formatting
lc_numeric = 'German_Germany.1252'			# locale for number formatting
lc_time = 'German_Germany.1252'				# locale for time formatting
mit der Formatierung geht das nicht, weil das im Programm ja eine Bind-Variable ist und die hat schon den Typ DateTime. Das Datum als Text diente nur als Verdeutlichung hier in dem Post

im Prgramm steht dann

Code: Alles auswählen

SELECT out_sum, out_sum_1 
from 
  sc_SEL_BESTWERT_GESLIEFLAGER( 
  cast( :nLager as INTEGER), 
  cast( :nKunde as INTEGER), 
  cast( :nArtikelNr as INTEGER), 
  cast( :dtEndzeit as TIMESTAMP WITHOUT TIME ZONE ))
Den Cast mache ich nur zur Sicherheit, weil PG-ODBC anscheinend manchmal Probleme mit NULL Werten hat. Wenn eine Variable den Wert Null hatte, dann konnte er ab und zu die Funktionskennung nicht finden, obwohl die Variable ja einen Typ hat ?? seltsam.

sc_SEL_BESTWERT_GESLIEFLAGER ist ja eine Funktion, keine Tabelle oder View.

castorp
Erfahrener Benutzer
Beiträge: 1126
Registriert: Sa 27. Jun 2009, 22:24
Wohnort: Bayern

Re: SQL Fehler: ungültige Eingabesyntax für Typ timestamp: »«

Beitrag von castorp » Mo 1. Apr 2019, 23:18

Die Fehlermeldung sagt, dass Du versuchst einen leeren String zu übergeben. Das ist etwas anderes als ein NULL Wert.

Das Folgende liefert einen Fehler:

Code: Alles auswählen

select cast('' as timestamp)
Das hier ist in Ordnung:

Code: Alles auswählen

select cast(null as timestamp)
A SQL query walks into a bar and sees two tables. He walks up to them and says 'Can I join you?'

JSpatz
Benutzer
Beiträge: 65
Registriert: Fr 19. Mai 2006, 13:58

Re: SQL Fehler: ungültige Eingabesyntax für Typ timestamp: »«

Beitrag von JSpatz » Mi 3. Apr 2019, 20:59

Yep, das ist genau das was in meinem ersten Post steht.
Aber das Problem ist, dass in der Variablen ein Wert drinseht nämlich 31.12.2018 und nicht null. Und daraus wird irgendwo '' weshalb auch immer. Inzwischen habe ich den ODBC Treiber in Verdacht, muss da mal nachforschen.

Vielen Dank erst mal.

akretschmer
Erfahrener Benutzer
Beiträge: 7613
Registriert: So 29. Okt 2006, 13:35
Wohnort: Kaufbach, Sachsen, Germany, Germany
Kontaktdaten:

Re: SQL Fehler: ungültige Eingabesyntax für Typ timestamp: »«

Beitrag von akretschmer » Do 4. Apr 2019, 00:10

Nun ja.

Code: Alles auswählen

ungültige Eingabesyntax für Typ timestamp: »«
läßt mich eher @castorp glauben als Dir ...

Sind die Treiber identisch? Logge mal alle Statements, was kommt da bei raus?
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

Antworten