AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi StoredProcedure Problem
Thema durchsuchen
Ansicht
Themen-Optionen

StoredProcedure Problem

Ein Thema von DirkG · begonnen am 27. Dez 2008 · letzter Beitrag vom 28. Dez 2008
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von DirkG
DirkG

Registriert seit: 29. Sep 2003
Ort: Schwerin
67 Beiträge
 
Delphi 5 Enterprise
 
#1

StoredProcedure Problem

  Alt 27. Dez 2008, 18:06
Datenbank: Interbase • Version: 6 • Zugriff über: IBX
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:
yyyy mm xx
---- -- --
 |    |  |.. Laufende Nummer 01-99
 |    |..... Nummer des aktuellen Monat
 |.......... Nummer des aktuellen Jahr
Nun war meine Überlegung, das ganze durch den Server mit einer StoredProcedure machen zu lassen.
Die einzelnen Funktionen, um an die Werte zu kommen habe schon:
SQL-Code:
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%'));
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:
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 ;^
Human are Human to make mistakes.
  Mit Zitat antworten Zitat
Benutzerbild von Mr_G
Mr_G

Registriert seit: 2. Sep 2004
Ort: Duisburg
468 Beiträge
 
Delphi 2006 Professional
 
#2

Re: StoredProcedure Problem

  Alt 27. Dez 2008, 18:11
Such mal nach RETRUN und CONCAT... ich denke das müsste helfen.
Jan
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: StoredProcedure Problem

  Alt 27. Dez 2008, 18:14
SELECT lyear || lmonth || lid INTO :NEWNUMBER;
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von DirkG
DirkG

Registriert seit: 29. Sep 2003
Ort: Schwerin
67 Beiträge
 
Delphi 5 Enterprise
 
#4

Re: StoredProcedure Problem

  Alt 27. Dez 2008, 18:15
RETRUN und CONACT
bist du da sicher in der Onlinehilfe zu sql ist kein Eintrag mit CONACT
Human are Human to make mistakes.
  Mit Zitat antworten Zitat
Benutzerbild von Mr_G
Mr_G

Registriert seit: 2. Sep 2004
Ort: Duisburg
468 Beiträge
 
Delphi 2006 Professional
 
#5

Re: StoredProcedure Problem

  Alt 27. Dez 2008, 18:17
Oje... das tut mir leid... ist eine MySQL-Funktion.
Sorry!
Jan
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: StoredProcedure Problem

  Alt 27. Dez 2008, 18:18
Zitat von DirkG:
RETRUN und CONACT
bist du da sicher in der Onlinehilfe zu sql ist kein Eintrag mit CONACT
RETURN ist bei IB/FB SUSPEND und CONCAT mit Hilfe des SQL-Konkatenators ||
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von DirkG
DirkG

Registriert seit: 29. Sep 2003
Ort: Schwerin
67 Beiträge
 
Delphi 5 Enterprise
 
#7

Re: StoredProcedure Problem

  Alt 27. Dez 2008, 18:24
@Mr_G
Is OK. Hatte ich schon mir gedacht.

@mkinzler
Zitat:
SELECT lyear || lmonth || lid INTO :NEWNUMBER;
Das scheint mir richtig zu sein. Die IB-Console meckert noch in der Zeile 3
TOKEN UNKNOW VARCHAR
Keine Ahnung warum. Sollte doch so aussehen?
Human are Human to make mistakes.
  Mit Zitat antworten Zitat
Benutzerbild von Wunni
Wunni

Registriert seit: 1. Mai 2003
Ort: Hamburg
46 Beiträge
 
FreePascal / Lazarus
 
#8

Re: StoredProcedure Problem

  Alt 27. Dez 2008, 18:26
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
Andreas Wunnenberg
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#9

Re: StoredProcedure Problem

  Alt 27. Dez 2008, 18:28
Oder ganz ohne lokale Variablen
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von DirkG
DirkG

Registriert seit: 29. Sep 2003
Ort: Schwerin
67 Beiträge
 
Delphi 5 Enterprise
 
#10

Re: StoredProcedure Problem

  Alt 27. Dez 2008, 18:44
@mkinzler
Zitat:
Oder ganz ohne lokale Variablen
Wäre schön gewesen doch bekomme ich das so nicht hin, da ja die Suchanfrage für die bisher vergebenen Nummern mit den Werten von Monat und Jahr gefüllt werden muss. Ich versuche mal folgendes.
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 ;^
Human are Human to make mistakes.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:28 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz