![]() |
Datenbank: Interbase • Version: 6 • Zugriff über: IBX
StoredProcedure Problem
Hallo Leute!
Wieder einmal ein Problem zwischen meinen Ohren... Also folgendes würde ich gerne erreichen. Um ein Rechnungsnummer zu erzeugen, wurde bisher auf der Client-Seite die Nummer zusammengestellt und geprüft, ob diese noch frei ist. Die Nummer basiert auf einem Schlüssel, der wie folgt aus sieht:
Code:
Nun war meine Überlegung, das ganze durch den Server mit einer StoredProcedure machen zu lassen.
yyyy mm xx
---- -- -- | | |.. Laufende Nummer 01-99 | |..... Nummer des aktuellen Monat |.......... Nummer des aktuellen Jahr Die einzelnen Funktionen, um an die Werte zu kommen habe schon:
SQL-Code:
Nun das Problem. Wie bokomme ich die einzelnen Werte in den Rückgabewert der Procedure und wie stelle ich den String-Ausdruck für die letzte Abfrage zusammen? Ich hatte gedacht, es so machen zu können, aber IB hat da was dagegen:
SELECT EXTRACT(YEAR FROM CURRENT_TIMESTAMP) FROM RDB$DATABASE;
SELECT EXTRACT(MONTH FROM CURRENT_TIMESTAMP) FROM RDB$DATABASE; SELECT COUNT(RNUMBER) FROM Rechnungen WHERE (RNUMBER LIKE ('yyyymm%'));
SQL-Code:
SET TERM ^ ;
CREATE PROCEDURE MglGetNUMBER RETURNS (NEWNUMBER VARCHAR(20)) AS BEGIN lyear VARCHAR(4); lmonth VARCHAR(2); lid VARCHAR(2); SELECT EXTRACT(YEAR FROM CURRENT_TIMESTAMP) INTO :lyear FROM RDB$DATABASE; SELECT EXTRACT(MONTH FROM CURRENT_TIMESTAMP) into :lmonth FROM RDB$DATABASE; SELECT COUNT(RNUMBER) FROM Rechnungen WHERE (RNUMBER LIKE (lyear+lmonth+'%')) INTO :lid; SELECT lyear+lmonth+lid INTO :NEWNUMBER; SUSPEND; END ^ COMMIT WORK ^ SET TERM ;^ |
Re: StoredProcedure Problem
Such mal nach RETRUN und CONCAT... ich denke das müsste helfen.
|
Re: StoredProcedure Problem
SQL-Code:
SELECT lyear || lmonth || lid INTO :NEWNUMBER;
|
Re: StoredProcedure Problem
:gruebel: RETRUN und CONACT
bist du da sicher in der Onlinehilfe zu sql ist kein Eintrag mit CONACT |
Re: StoredProcedure Problem
Oje... das tut mir leid... ist eine MySQL-Funktion. :oops:
Sorry! |
Re: StoredProcedure Problem
Zitat:
|
Re: StoredProcedure Problem
@Mr_G
Is OK. Hatte ich schon mir gedacht. @mkinzler Zitat:
TOKEN UNKNOW VARCHAR Keine Ahnung warum. Sollte doch so aussehen? |
Re: StoredProcedure Problem
eventuell so?
SQL-Code:
CREATE PROCEDURE MGLGETNUMBER
RETURNS ( NEWNUMBER VARCHAR(20)) AS declare variable y char(4); declare variable m char(2); declare variable lfdnr integer; begin y = extract(year from current_timestamp); m = extract(month from current_timestamp); select count(rnumber)+1 from Rechnungen where rnumber starting with :y||:m into :lfdnr; /* mit count ist das allerdings nicht sehr elegant, da die Nummern ja nicht fortlaufend existieren werden */ newnumber = :y||:m||:lfdnr; suspend; end |
Re: StoredProcedure Problem
Oder ganz ohne lokale Variablen
|
Re: StoredProcedure Problem
@mkinzler
Zitat:
SQL-Code:
SET TERM ^ ;
CREATE PROCEDURE GetNUMBER RETURNS (NEWNUMBER VARCHAR(10)) AS DECLARE VARIABLE lyear VARCHAR(4); DECLARE VARIABLE lmonth VARCHAR(2); DECLARE VARIABLE lid VARCHAR(2); BEGIN /* Jahr und Monat für die Suche ermitteln */ SELECT EXTRACT(YEAR FROM CURRENT_TIMESTAMP) INTO :lyear FROM RDB$DATABASE; SELECT EXTRACT(MONTH FROM CURRENT_TIMESTAMP) INTO :lmonth FROM RDB$DATABASE; /* Suche Anzahl der bisher in Jahr+Monat erstellten Rechnungen */ SELECT COUNT(RNUMBER) FROM Rechnungen WHERE (RNUMBER LIKE (lyear||lmonth||'%')) INTO :lid; /* Setze neue Rechnungsnummer zusammen */ SELECT lyear||lmonth||lid INTO :NEWNUMBER; SUSPEND; END ^ COMMIT WORK ^ SET TERM ;^ |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:43 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 by Thomas Breitkreuz