Entwickler-Ecke

Datenbanken - Firebird Serial??


doc_summer - Mo 12.04.04 11:36
Titel: Firebird Serial??
Hi!
Ich habe mich jetzt doch für FB-Embedded entschieden.
Folgendes Problem hab ich:

Unter PostgreSQL gabs beim Create Table Statement den
Datentyp serial (ist normaler Integerwert) der bei einem Insert nicht Explizit angegeben werden musste.

(Da die Datenbank dann dafür sorgte, das zum Beispiel eine ID, die mit "serial" angelegt wurde, automatisch hochgezählt wurde.)

Ich bin mit der FB-Syntax noch nicht so vertraut.

Gibt es so was ähnliches auch hier?
Oder muss ich hier massiv mit Triggern arbeiten?
Und wenn ja- wie sieht so ein Trigger hier dann aus?

Viele Grüsse und Danke
Chris


hansa - Mo 12.04.04 13:45

Gibts so nicht. Mußt Generator/Trigger nehmen, oder von Hand zu Fuß eintragen (Stored Procedure), z.B.:


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
CREATE GENERATOR GEN_REC_ID;

CREATE TRIGGER REC_BI0 FOR REC
ACTIVE BEFORE INSERT POSITION 0
AS 
begin 
  IF (NEW.ID IS NULL) THEN   
  begin 
    NEW.ID = GEN_ID (GEN_REC_ID,1);
  end 
end
^

SET TERM ; ^


doc_summer - Mo 12.04.04 22:02

Ahh cool! Das ging aber Flott.

ich habe ne Tabelle z.B. Autos:
create table Autos (
id integer,
name VARCHAR(256))

"id" soll automatisch hochgezählt werden.. Und dann?

CREATE GENERATOR GEN_REC_ID;

CREATE TRIGGER REC_BI0 FOR REC // Wo Referenzier ich da auf Autos.id? hier?
ACTIVE BEFORE INSERT POSITION 0 // Was ist Active?
AS
begin
IF (NEW.ID IS NULL) THEN // new.id wäre dann hier Autos.id?
begin
NEW.ID = GEN_ID (GEN_REC_ID,1); //zählt man so hoch?
end
end
^

SET TERM ; ^ // Was zum Geier ist Set Term?? und vorallem was bedeutet das "^" Zeichen?

Fragen über Fragen.. Aber geil..
Kannst Du mir hier noch irgendwei weiterhelfen?
Oder besser noch ein Beispiel für meine Autos tabelle aufzeigen?
Vielen Dank und Grüsse
Chris


hansa - Mo 12.04.04 23:36

Ersetze einfach REC mit AUTO. Und mache den Rest so, wie gehabt. 8)

EDIT: Welches Tool benutzt Du eigentlich für die Tabellen anzulegen ?