Zitat von
Paul Jr.:
ganz einfach... falls zwei User gleichzeitig einen neuen Datensatz anlegen (in der gleichen Tabelle)... dann steht in dem Generator nicht mehr dieses Wert die man braucht...(bei langsamen Zugriffen ist das schnell passiert)...
Halt, halt, da haben wir aneinander vorbeigeschrieben, die Schuld nehme ich auf mich! In der 2. Lösung meinte ich nicht, dass NACH dem Einfügen der Generator-Stand abgefragt werden soll (da hätte ich dann ja eigentlich ein ",0" verwende müssen) sondern, der Wert der ID soll VOR dem Einfügen über ne normale Select abgefragt werden, per "Hand" dann in das InsertSQL eingefügt werden und fertig!
Natürlich sollte man niemals NACH dem Einfügen den Generatorstand abfragen und dann Rückschlüsse auf die vom Insert verwendete Generator-ID machen!!!!
Hier noch die Insert Proc mit Rückgabewert:
Code:
SET TERM ^ ;
CREATE PROCEDURE TestNeu1 (Wert1 VARCHAR(20))
RETURNS (NewID INTEGER)
AS
BEGIN
FOR
SELECT Gen_ID(Generatorname,1) from rdb$database into NewID
do
begin
insert into Tabelle Values (:NewID, :Wert1);
suspend;
end
END^
Grüße
Lemmy