AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Stored pocedure

Ein Thema von kiar · begonnen am 17. Mai 2004 · letzter Beitrag vom 21. Mai 2004
Antwort Antwort
Seite 4 von 4   « Erste     234   
Lemmy

Registriert seit: 8. Jun 2002
Ort: Berglen
2.366 Beiträge
 
Delphi 10.3 Rio
 
#31

Re: Stored pocedure

  Alt 19. Mai 2004, 11:13
Hi Hansa,

Zitat von Hansa:

Jetzt ist nur noch die Frage, wie man solch eine Prozedur Feld/Tabellen- unabhängig machen kann.

tut nicht.... Es gibt aber in FB 1.5 (vielleicht auch IB 7.x?) die Möglichkeit innerhalb einer SP ein beliebiges Statement auszuführen (was allerdings den Sinn einer SP wieder in Frage stellt und zudem ein gewisses Sicherheitsrisiko in sich birgt!).

Grüße
Lemmy
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#32

Re: Stored pocedure

  Alt 19. Mai 2004, 12:21
Hi Lemmy,

gut, daß du auch was dazu sagst. Aber die Idee mit der SP kam von Kiar nicht von mir. Was ist mit der Trigger-Lösung ?
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von CenBells
CenBells

Registriert seit: 30. Mär 2003
Ort: Kiel urspr. Lübeck
176 Beiträge
 
Delphi 7 Professional
 
#33

Re: Stored pocedure

  Alt 19. Mai 2004, 12:34
Zitat von Robert_G:
@CenBells
Dein Vorschlag wäre im endeffekt das, was ich als "billige Lösung" vorgeschlagen habe, nur das die Felder
SQL-Code:
Created_date Timestamp Not Null,
Created_By Integer Not Null, -- oder auch String
sinnlos sind.
In der aktiven Tabelle steht der User & das Datum der letzten Änderung, im Audit wäre der Eintrag mit der kleinsten Audit ID zu dieser PK der Eintrag mit dem "Erzeuger". Dabei fällt mir auf: Auch das Audit bräuchte natürlich einen PK.
Jop, das ist die billige lösung, aber warum sind die felder sinnlos, bzw was genau meinst du mit aktiver tabelle? So benötigt man keine eigene neue tabelle und hat die informationen direkt parat... Ist wohl geschmackssache..
Den "schönen, großen" Audit würde ich aber bevorzugen und dann natürlich mit neuer tabelle.
@kiar: musst nicht zwingend auf FB1.5 wechseln. Es geht auch mit IB dann nur nicht so schön (generische Trigger...)
[edit] ein o durch ein ö ersetzt
Gruß
Ken
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#34

Re: Stored pocedure

  Alt 19. Mai 2004, 12:40
@Ken: also doch Trigger ? Nur was meinst Du mit "generischen" Triggern ??
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von CenBells
CenBells

Registriert seit: 30. Mär 2003
Ort: Kiel urspr. Lübeck
176 Beiträge
 
Delphi 7 Professional
 
#35

Re: Stored pocedure

  Alt 19. Mai 2004, 13:04
HAllo Hansa,

klar geht das mit Triggern.
Mit Generisch meine ich die Erweiterung der Syntax des FB, daß du jetzt einen Trigger für alle Vorgänge schreiben kannst und dann im Trigger fragst, ob man nun gerade ein insert, update oder delete durchführt.
Dafür gibt es seit FB 1.5 die möglichkeit per if abfrage den modus festzustellen
SQL-Code:
IF (updating) THEN BEGIN
   ...
  END
  ELSE IF (inserting) THEN...
Wie genau die Syntax für den Trigger header aussieht musst du in den Release notes mal nachlesen. Wahrscheinlich sowas wie
SQL-Code:
CREATE TRIGGER ...
 ACTIVE BEFORE INSERT OR UPDATE ...
Das mach die Arbeit halt ein bisserl schöner. Ein Trigger anstelle für drei.

Gruß
Ken
  Mit Zitat antworten Zitat
DelphiDeveloper

Registriert seit: 9. Apr 2003
Ort: Köln
256 Beiträge
 
Delphi XE2 Enterprise
 
#36

Re: Stored pocedure

  Alt 19. Mai 2004, 14:28
ich versteht zwar nicht den sinn folgender zeile
IF (L <> 'NOW') THEN LETZTEAENDERUNG = 'NOW';

aber es geht ja hier um ein variables sql statement. Bei Firebird
gibt es hierzu das maechtige feature 'execute statement', damit kann man sowas realisieren.
Unter Interbase gibt es das meines wissens nicht (korrigiert mich wenn dem nicht so ist)

Hier die Prozedure:
Code:
CREATE PROCEDURE HELPME (
    TABNAME VARCHAR(32),
    FIELDNAME VARCHAR(32),
    ID INTEGER)
RETURNS (
    LETZTEAENDERUNG TIMESTAMP)
AS
DECLARE VARIABLE SQL VARCHAR(512);
DECLARE VARIABLE L TIMESTAMP;
BEGIN
  EXECUTE STATEMENT 'SELECT ' || FIELDNAME || ' FROM ' || TABNAME
  || ' WHERE ID = ' || :ID INTO :L;
  IF (L <> current_timestamp) THEN
    LETZTEAENDERUNG = current_timestamp;
  SUSPEND;
END
die systemvariablen now und today sind veraltet, man benutzt künftig besser current_timestamp bzw. current_date

[SORRY WAR ZU SCHNELL UND HABE DEN THREAD NICHT BIS ANS ENDE GELESEN; WAR JA ALLES SCHON BEKANNT BIS AUF DIE SACCHE MIT CURRENT_TIMESTAMP]
  Mit Zitat antworten Zitat
Benutzerbild von kiar
kiar

Registriert seit: 2. Aug 2003
Ort: Aschersleben
1.362 Beiträge
 
Delphi 5 Professional
 
#37

Re: Stored pocedure

  Alt 19. Mai 2004, 14:36
hallo dephideveloper,

execute Statement geht unter Firebird 1.0 auch nicht, marcel hatte sich darüber schon ausgelassen

raik
verhältnisse die einem nicht passen,
muss man verändern oder verlassen
  Mit Zitat antworten Zitat
Benutzerbild von kiar
kiar

Registriert seit: 2. Aug 2003
Ort: Aschersleben
1.362 Beiträge
 
Delphi 5 Professional
 
#38

Re: Stored pocedure

  Alt 21. Mai 2004, 18:19
Hallo all,

mit der Stored procedure wurde erstmal geknickt. interesse meinerseits ist aber da . werde mich mal mit audit trail befassen.

habe auch schon einen guten ansatz erhalten. dank dem Spender

es wurde mit BI und AU Triggern realisiert und scheint zu laufen.

danke raik
verhältnisse die einem nicht passen,
muss man verändern oder verlassen
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#39

Re: Stored pocedure

  Alt 21. Mai 2004, 19:02
Warum AU?
Dann hast du doch keinen Zugriff mehr auf den ":New Record".
Im Endeffekt wäre es bei der von dir gewählten Lösung nix weiter als das:
SQL-Code:
CREATE Table Robert_G.SENT_QUERIES_Audit
  (PK_SENT_QUERIES_Aud Integer -- Zusätzliche PK_Spalte
  ,PROJECT_NO NUMBER(22)
  ,SUBJECT_ID NUMBER(22)
  ,SUBJID VARCHAR2(80)
  ,ERROR_ID NUMBER(22)
  ,SENT_TO_MONITOR VARCHAR2(60)
  ,SENT_DATE VARCHAR2(200)
  ,BACK VARCHAR2(500)
  ,BACK_DATE VARCHAR2(20))
SQL-Code:
-- Prim Key auf diese Spalte
ALTER Table Robert_G.SENT_QUERIES_audit
  ADD Primary Key(PK_SENT_QUERIES_Aud)
  Using Index
SQL-Code:
-- Sequence für den Audit PK
CREATE Sequence Robert_G.SENT_QUERIES_Aud_Seq
SQL-Code:
-- Sequence für den Audit PK
CREATE Trigger Robert_G.SENT_QUERIES_Aud_PK_Trig
 Before INSERT ON Robert_G.SENT_QUERIES_Audit
 FOR EACH ROW
DECLARE
  NewID Integer;
BEGIN
  SELECT Robert_G.SENT_QUERIES_Aud_Seq.NextVal
  INTO NewID
  FROM Dual;

  :New.PK_SENT_QUERIES_Aud := NewID;
END;
SQL-Code:
CREATE Trigger Robert_G.SENT_QUERIES_Aud_Trig
 Before INSERT Or Update ON Robert_G.SENT_QUERIES
 FOR EACH ROW
 BEGIN
  -- Die 2 Zeilen klappen nur mit einem BU Trigger
  :New.EditDate := SysDate;
  :New.EditUser := User;

  If UPDATING Then
    INSERT INTO Robert_G.SENT_QUERIES_Audit
    VALUES
     ( null
     ,:Old.PROJECT_NO
     ,:Old.SUBJECT_ID
     ,:Old.SUBJID
     ,:Old.ERROR_ID
     ,:Old.SENT_TO_MONITOR
     ,:Old.SENT_DATE
     ,:Old.BACK
     ,:Old.BACK_DATE);
  End If;
END;
Falls du den Code zu IB übersetzen konntest, dürfte er dir das für alle Tabellen des angegeben Users machen. (Audit tabelle & Co erzeugen)

Das da oben wurde aus einer Tabellenleiche von vorgestern, die noch in meinem User lag, erzeugt.
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#40

Re: Stored pocedure

  Alt 21. Mai 2004, 19:12
Doch doch, Robert. Die Trigger gehen schon so, wie Kiar gesagt hat. Und das ganze auch noch in einem Audit aufzuzeichnen ist kein Problem mehr.
Gruß
Hansa
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 4 von 4   « Erste     234   


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 18:59 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