![]() |
Datenbank: Firebird • Version: 2,5 • Zugriff über: FireDAC
Firebird Feld Funktion
Hallo zusammen,
ich möchte in einer Tabelle eine Art Feldfunktion hinzufügen, die automatisch eine Nummer hochzählt. Wie ein Generator je Eintrag in einer Tabelle. Gibt es so eine Funktion schon? Oder wie löst man dies am besten? Vielen Dank. Gruß Eppos |
AW: Firebird Feld Funktion
Wann soll hochgezählt werden?
Beim Einfügen, beim Ändern, nur wenn die Funktion manuell aufgerufen wird? Per Trigger? Sinngemäß sowas?
SQL-Code:
Oder halt 'ne Kombination daraus?
SET TERM ^ ;
CREATE TRIGGER TR_Name_BI FOR Tabellenname ACTIVE BEFORE INSERT POSITION 0 AS BEGIN if (NEW.Zaehlspalte is NULL) then NEW.Zaehlspalte = 0; END^ CREATE TRIGGER TR_Name_BU FOR Tabellenname ACTIVE BEFORE UPDATE POSITION 0 AS BEGIN NEW.Zaehlspalte = NEW.Zaehlspalte + 1; END^ SET TERM ; ^ Oder Aufgabenstellung präzisieren, da mir nicht klar ist, ob ich unter dem Geschriebenen das verstehe, was Du meinst. Soll ein in der Tabelle vorhandenen Wert einer Spalte hochgezählt werden oder soll für die ganze Tabelle ein Wert hochgezählt werden, so dass hier ein eindeutiger Wert für die betroffenen Spalte entsteht? Oder? |
AW: Firebird Feld Funktion
Das sieht schon mal gut aus, du hast es richtig erkannt.
Die Spalte eines einzelnen Eintrags soll um eins hochgezählt werden. Aber nur dann wenn die Funktion aufgerufen wird. Tabelle: ID | Zahl 1 | 0 2 | 0 3 | 0 Funktion: Gib mir Zahl von ID 2, wäre dann 1 ID | Zahl 1 | 0 2 | 1 3 | 0 Also eigentlich wie ein Generator, nur auf Feldebene. |
AW: Firebird Feld Funktion
Ich würde hier auch mit Sequenz und auf jeden Fall Semaphorenfunktion GEN_ID() arbeiten.
|
AW: Firebird Feld Funktion
Wenn um eins hochgezählt werden soll, wenn eine Funktion aufgerufen wird, dann muss halt die Funktion den Generator aufrufen.
Ganz klar ist mir allerdings noch nicht, was Du genau möchtest. Sowas?
SQL-Code:
select ID, DeineFunktion(Zahl) from tabelle?
Soll dann Zahl in der Datenbank = Zahl + 1 werden? Oder ausgehend von Deinem Beispiel: Soll beim nächsten Funktionsaufruf bei ID 1 Zahl = 1 werden oder Zahl = 2. Soll das Zählen pro Spalte für sich allein funktionieren oder pro einzelne Zelle? Also: wird beim Funktionsaufruf, egal in welcher Zeile, Spalte = Spalte + 1 vom zuletzt vergebenen Wert für Zahl oder wird beim Funktionsaufruf für ID 1 die Zahl zu ID 1 um eins erhöht und die Zahl für ID 2 beim Aufruf der Funktion für ID 2 um eins erhöht? Führt der nächste Funktionsaufruf zu diesem Ergebnis
Code:
oder zu jenem?
ID | Zahl
1 | 1 2 | 1 3 | 0
Code:
ID | Zahl
1 | 2 2 | 1 3 | 0 |
AW: Firebird Feld Funktion
Also die einzelne Zeile soll um 1 erhöht werden. Generatoren wäre nicht so gut, da ja je Eintrag in der Tabelle ein Generator benötigt würde.
Bei 200.000 Datensätzen wären es 200.000 Generatoren. Ich denke da eher an einen Procedure die den Wert zurück gibt. @Delphi.Narium Soll beim nächsten Funktionsaufruf bei ID 1 Zahl = 1 werden oder Zahl = 2. --> Es soll Zahl 1 werden. Es führt also zum ersteren Ergebnis. |
AW: Firebird Feld Funktion
Eine Prozedur benötigt man ja nicht. GEN_ID() macht das ja schon und zwar sicher.
Pro Datensatz würde man es auch nicht beötigen, denn dann würde ja ein Generator ausreichen; höchtens einen pro Feld. |
AW: Firebird Feld Funktion
Also nochmal zur Klarstellung: Du willst eine Methode haben die ein bestimmtes Integerfeld eines Datensatzes um eins hochzählt?
Sowas wie
Code:
UPDATE MeineTabelle
SET MeinFeld = MeinFeld + 1 WHERE ID = :ID RETURNING MeinFeld |
AW: Firebird Feld Funktion
@Uwe Raabe
Genau richtig. Wenn ich mir dein Update mit returning anschaue, passt das glaube ich ganz gut. Ich werde es mir mal ansehehen... Manchmal steht man einfach auf dem Schlauch :shock: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:17 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