![]() |
Datenbank: Interbase • Version: 6 • Zugriff über: IBConsole
Interbase StoredProc anlegen. Fehlermeldung
Hallo,
ich wollte folgende StoredProc in der IBConsole anlegen:
SQL-Code:
Allerdings ergibt das den Fehler
SET TERM ^;
create procedure nextFreeLiefNumber ( lBound char(7), uBound char(7)) returns (A_RETURN INTEGER) AS begin SELECT o.L1_NR as freienummer FROM FLIEF_1 o where o.L1_nr between lBound and uBound 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)); A_RETURN = cast(freienummer as double precision)+1; end SET TERM ;^ Zitat:
Zitat:
Irgendwas übersehe ich ... wäre nett, wenn mir jemand auf die Sprünge helfen kann. |
Re: Interbase StoredProc anlegen. Fehlermeldung
SQL-Code:
getiipt und nicht getestet.
SET TERM ^;
create procedure nextFreeLiefNumber ( lBound char(7), uBound char(7)) returns (A_RETURN INTEGER) AS declare freienummer double; begin For SELECT o.L1_NR as freienummer FROM FLIEF_1 o where o.L1_nr between lBound and uBound 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 do A_RETURN = cast(freienummer as double precision)+1; suspend; end SET TERM ;^ |
Re: Interbase StoredProc anlegen. Fehlermeldung
Wenn ich es richtig sehe, musst Du das SELECT-Ergebnis in eine Variable speichern, damit Du es für den Rückgabewert verwenden kannst; und das fehlt (ich habe die Prozedur entsprechend geändert):
Zitat:
Du musst aber aufpassen, dass dieser SELECT wirklich immer nur einen Wert liefert; andernfalls erhältst Du zur Laufzeit eine neue unerklärliche Fehlermeldung. War's das? Jürgen |
Re: Interbase StoredProc anlegen. Fehlermeldung
Ah interessant. Syntax mal wieder ganz anders wie unter Informix.
Allerdings funktioniert es nicht. Zuerst musste ich ein VARIABLE hinter DECLARE setzen und dann läuft es nicht durch Zitat:
@Jürgen Gleiches Problem wie oben |
Re: Interbase StoredProc anlegen. Fehlermeldung
Hi,
Du solltest die SP auch abschließen!
SQL-Code:
SET TERM ^;
... SUSPEND; /* das fehlte außerdem, wie mkinzler anmerkte */ end^ |
Re: Interbase StoredProc anlegen. Fehlermeldung
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:
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.
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 ;^ 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 |
Re: Interbase StoredProc anlegen. Fehlermeldung
Ok danke. Ich werde das direkt morgen früh testen.
Sind meine ersten Schritte mit SQL und Interbase. Zuvor nur rudimentär mit Informix und TQuery auf Paradox. |
Re: Interbase StoredProc anlegen. Fehlermeldung
Gute Morgen,
So das ganze hat funktioniert. Danke noch einmal. L1_nr ist char. Es ist eine Lieferantennummer die maximal 7 Stellen besitzt und alphanummerisch ist. Die automatisch vergebenen Nummern sind aber nummerisch. Der Kunde kann selber einstellen wieviele Stellen die Nummer haben kann. Also z.b 000-999 oder 0000-9999. Sven |
Re: Interbase StoredProc anlegen. Fehlermeldung
----- hat sich erledigt
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:13 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz