Subject Re: [firebird-php] Cannot create simple trigger???
Author Helen Borrie
At 06:24 AM 23/05/2004 +0000, you wrote:
>I'm trying to crate some simple triggers and am getting an error that
>appears that GEN_ID is not recognized. Here's the trigger:
>
>SET TERM !! ;
>CREATE TRIGGER Trg_Address_ID
>FOR Address
>BEFORE INSERT AS
>NEW.ID GEN_ID(addr_gen_id, 1);
>END !!
>SET TERM ; !!
>
>and it blows up on GEN_ID!! Isn't this the correct format?

"Format"? It's actually invalid PSQL.

Try this:
SET TERM !! ;
CREATE TRIGGER Trg_Address_ID
FOR Address
BEFORE INSERT AS
begin
if (new.ID is null) then
NEW.ID = GEN_ID(addr_gen_id, 1);
END !!
SET TERM ; !!

Of course, you must have already created the generator:

CREATE GENERATOR addr_gen_id;
commit;

Also, know that generators - unlike EVERYTHING ELSE in Firebird - are
outside transaction control. Some of your later posts indicate great
confusion here. If you get a value from a generator, it's
yours. Generators don't roll back if they are unused; two requests can
never acquire the same value from the same generator. (As long as you
don't meddle with the generator, of course!!)

Helen