Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Ist soetwas mit Stored-procedures möglich?... (https://www.delphipraxis.net/53588-ist-soetwas-mit-stored-procedures-moeglich.html)

mojo777 19. Sep 2005 15:36

Datenbank: ib6 • Version: 6 • Zugriff über: ib

Ist soetwas mit Stored-procedures möglich?...
 
Hallo,
ich überlege gerade ob ich folgendes mit stored procedures realisieren kann...
also eine transaktion wird ausgeführt....
tabelle: transactions
tabellenfelder(vereinfacht): id, knd_id, geld, xyz
wenn ich jetzt einen neuen datensatz reinschreibe will ich folgendes machen lassen:
zählen aller geldbeträge in den transactionsdatensätzen, wo die so eben reingeschriebene knd_id vorkommt.
anschließend soll der wert in die kunden datenbank geschrieben werden.
irgendwie so?:
Delphi-Quellcode:
insert into KUNDEN (PUNKTESTAND) values(:GELDSUMME)
könnt emir vll jemand einen einfachen code vorschlagen... :-( ich habe mit stored procedures irgendwie noch nie was vernunftiges gemacht. wobei.... oder sollte ich vll. eher einen trigger bzw generator verwenden um das problem zu lösen?

mfg

mojo

jensw_2000 19. Sep 2005 16:22

Re: Ist soetwas mit Stored-procedures möglich?...
 
Das ist auf den ersten Blick am einfachsten durch einen AFTER INSERT TRIGGER zu lösen.


Codeschnipsel kann ich dir für die IB SQL-Syntax nicht fertigmachen, weil ich diese dafür zu wenig kenne. Ich vermute jedoch, das es bei den IB Triggern ebenfalls die temporären Tabellen INSERTED und DELETED gibt. Diese enthalten den (die) grade eingefügten, editierten bzw. gelöschten Datensatz (Datensätze).

Schöne Grüße,
Jens
:hi:

mojo777 19. Sep 2005 17:16

Re: Ist soetwas mit Stored-procedures möglich?...
 
ok. ich habe jetzt folgendes:
Delphi-Quellcode:
AS
begin
  if (new.ausg_knd_id IS NOT NULL) then
    begin
    select count(AUSGANG.ausg_vpreis) from AUSGANG
      where AUSGANG.ausg_knd_id = new.AUSG_KND_ID
      into :PKT_SUMM;
     UPDATE kunden set KND_PUNKTE=:PKT_SUMM WHERE KND_ID=new.AUSG_KND_ID;
    end
end
aber mir wird angezeigt, dass die spalte PKT_SUMM nicht bekannt ist... ich will das aber als eine art variable verwenden.
wie mach ich das?

vielen dank!

mojo777 19. Sep 2005 18:01

Re: Ist soetwas mit Stored-procedures möglich?...
 
lösung des problems: (vll hilfs wem, wer auch in die stored procedures einsteigen will...)
trigger ruft eine stored procedure auf:
Delphi-Quellcode:
AS
begin
  EXECUTE PROCEDURE
    SETKNDPKT(new.AUSG_KND_ID);

end
die stored procedure sieht folgendermaßen aus:
Delphi-Quellcode:
SET TERM ^ ;

CREATE PROCEDURE SETKNDPKT (
    KND_ID INTEGER)
AS
DECLARE VARIABLE PKT_SUMM INTEGER;
begin
    select count(AUSGANG.ausg_vpreis) from AUSGANG
      where AUSGANG.ausg_knd_id = :KND_ID
      into :PKT_SUMM;
     UPDATE kunden set KND_PUNKTE=:PKT_SUMM WHERE KND_ID=:KND_ID;
  suspend;
end
^

SET TERM ; ^

GRANT SELECT ON AUSGANG TO PROCEDURE SETKNDPKT;

GRANT SELECT,UPDATE ON KUNDEN TO PROCEDURE SETKNDPKT;

GRANT EXECUTE ON PROCEDURE SETKNDPKT TO SYSDBA;
;-) sysdba

ok.

grüßle... ;-)


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:12 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