Einzelnen Beitrag anzeigen

Jürgen Thomas

Registriert seit: 13. Jul 2006
Ort: Berlin
750 Beiträge
 
#6

Re: Interbase StoredProc anlegen. Fehlermeldung

  Alt 21. Aug 2006, 17:47
Ach ja, wir haben alle übersehen, dass die Variablen und Input-/Output-Parameter mit einem Doppelpunkt versehen werden müssen, damit sie von den Spalten unterschieden werden können:
SQL-Code:
SET TERM ^;
create procedure nextFreeLiefNumber ( lBound char(7), uBound char(7))
    returns (A_RETURN INTEGER)
AS
  CREATE VARIABLE freienummer INTEGER; /*  den richtigen Typ musst Du eintragen  */
begin
    SELECT o.L1_NR FROM FLIEF_1 o where o.L1_nr between :lBound and :uBound /*  hier 2 Mal!!!  */
        AND NOT EXISTS (SELECT i.L1_NR FROM FLIEF_1 i
             WHERE cast(i.L1_NR as double precision) = cast(o.L1_NR as double precision)
                                                     + cast(1 as double precision))
      INTO :freienummer;
    A_RETURN = cast(freienummer as double precision)+1;
    SUSPEND; /*  das fehlte außerdem, wie mkinzler anmerkte  */
end^
SET TERM ;^
Bitte genau durchlesen. An anderen Stellen (z.B. bei der Zuweisung A_Return =...) ist IB nicht so pingelig; aber innerhalb von Select/Insert/Update/Delete muss es sehr genau sein.

Jürgen

[/edit]Nachtrag
Bitte prüfe auch noch die Datentypen:

1. Ich sehe keinen Grund, warum Du LI_NR und freienummer per cast() zu einem double precision machst. Wenn alles INTEGER sind, kannst Du auf cast verzichten.
2. Bei 'Erweiterung' eines Datentyps (von integer zu double) kann auf cast verzichtet werden; das macht IB selbst. Umgekehrt ist es nötig.
3. Da ich annehme, dass das Feld LI_NR integer ist, bietet es sich an, auch die Input-Parameter als integer statt char(7) zu deklarieren.

Jürgen
#D mit C# für NET, dazu Firebird
früher: Delphi 5 Pro, Delphi 2005 Pro mit C# (also NET 1.1)
Bitte nicht sauer sein, wenn ich mich bei Delphi-Schreibweisen verhaue; ich bin inzwischen an C# gewöhnt.
  Mit Zitat antworten Zitat