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

Hi zusammen,

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

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:

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.


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.

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’);

Hi, vielen Dank für die Antwort,

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

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

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.

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

Das Folgende liefert einen Fehler:

select cast('' as timestamp)

Das hier ist in Ordnung:

select cast(null as timestamp)

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.

Nun ja.

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?