Einzelnen Beitrag anzeigen

alex517

Registriert seit: 23. Nov 2004
Ort: Bernau b. Berlin
273 Beiträge
 
Delphi XE5 Enterprise
 
#21

AW: Incompatilbe column/host variable data type

  Alt 9. Nov 2017, 15:13
inzwischen kam der rote Kasten. Aber trotzdem zur Erläuterung..

Das Problem mit den Parameter habe ich auch schon gehabt.
Firebird versucht der Parameter :tmp_tabellen_name zu interpretieren.
Es kommt zu dem Schluss ein '*' die Länge von 1 Zeichen hat.
Für der Parameter :tmp_tabellen_name wird also der entsprechende Platz bereitgestellt.

Wenn jetzt mit f_lrtrim8(f_upper(:tmp_tabellen_name)) ein String mit der Länge > 1
an den Parameter übergeben wird, gibt es ein "string right truncation".

Man muss also Firebird mit cast() oder einer anderen Formulierung der Bedingung
überreden entsprechen Platz zu Verfügung zu stellen.


ich nehme mal ein einfacheres Beispiel.
Es sollen nur die passenden oder alle Personen zurückgegeben werden.
Für alle übergibt man * oder *** oder NULL je nach Variante
SQL-Code:
select
  P.*

from
  PERSON P

where
-- :NACHNAME = '' OR (P.NACHNAME = :NACHNAME) -- geht nicht
  :NACHNAME = '*OR (P.NACHNAME = :NACHNAME) -- geht mit max 1 Zeichen
-- :NACHNAME = '***' OR (P.NACHNAME = :NACHNAME) -- geht bis max 3 Zeichen

-- (:NACHNAME = cast('*' as VARCHAR(10))) OR (P.NACHNAME = :NACHNAME) -- geht bis 10 Zeichen

-- (cast(:NACHNAME as type of COLUMN PERSON.NACHNAME) = '*') OR (P.NACHNAME = :NACHNAME) -- geht bis Länge PERSON.NACHNAME

-- (:NACHNAME = cast('*' as type of COLUMN PERSON.NACHNAME)) OR (P.NACHNAME = :NACHNAME) -- geht bis Länge PERSON.NACHNAME

-- (:NACHNAME is null) or (P.NACHNAME = :NACHNAME) -- geht auch ohne cast()
Alexander
  Mit Zitat antworten Zitat