Einzelnen Beitrag anzeigen

Benutzerbild von Jens Schumann
Jens Schumann

Registriert seit: 27. Apr 2003
Ort: Bad Honnef
1.644 Beiträge
 
Delphi 2009 Professional
 
#3

Re: Firebird StoredPorc und Feldname als Paramter

  Alt 28. Sep 2007, 09:36
Hallo Dax,
nach einigem Probieren bin ich bei folgender Syntax angekommen
Code:
ALTER PROCEDURE "GET_VALUE"
(
  "A_JAHR" INTEGER,
  "A_ENTITY" VARCHAR(15) CHARACTER SET ISO8859_1,
  "A_POSNR" VARCHAR(15) CHARACTER SET ISO8859_1
)
RETURNS
(
  "A_VALUE" DOUBLE PRECISION
)
AS
DECLARE VARIABLE L_VER INTEGER;
DECLARE VARIABLE L_DEZ VARCHAR(3);
begin
  L_DEZ = 'DEZ';
  SELECT id FROM versionen WHERE aktive=1 INTO :L_VER;

  EXECUTE STATEMENT 'SELECT SUM('||:L_DEZ||') AS DEZ FROM positiondata pd
          WHERE (pd.jahr='||:A_JAHR||' AND pd.entity='||:A_ENTITY ||' AND
                 pd.posnr='||:A_POSNR||' and pd.ver='||:L_VER||') '
          INTO :A_VALUE;

  SUSPEND;
end
Das wird compiliert. Zur Laufzeit wird jedoch ein Fehler ausgegeben.
Parameter:
A_JAHR = 2007
A_ENTITY = 100132
A_POSNR = GV5031001110

Code:
Dynamic SQL Error
SQL error code = -206
Column unknown
GV5031001110
At line 3, column 40
Es sieht so aus, als ob der Parameter A_POSNR als Spalte interpretiert wird

Wenn ich dem Beispiel deines Links folge und die | nicht verwende erhalte ebenfalls einen Fehler:
Code:
ISC ERROR CODE:335544569

ISC ERROR MESSAGE:
Dynamic SQL Error
SQL error code = -206
Column unknown
A_JAHR
At line 2, column 27
Dann habe ich versucht die Parameter über values mitzugeben.
Code:
  EXECUTE STATEMENT 'SELECT SUM(:L_DEZ) AS DEZ FROM positiondata pd
          WHERE (pd.jahr=:A_JAHR AND pd.entity= :A_ENTITY AND
                 pd.posnr=:A_POSNR and pd.ver=:L_VER) '
          INTO :A_VALUE VALUES :L_DEZ,:A_JAHR,:A_ENTITY,:A_POSNR,:L_VER;
Das erzeugt schon beim compilieren einen Fehler
Code:
ISC ERROR CODE:335544569

ISC ERROR MESSAGE:
Dynamic SQL Error
SQL error code = -104
Token unknown - line 15, column 25
VALUES
I come from outer space to save the human race
  Mit Zitat antworten Zitat