Wouldn’t leaving out the “temp trigger” and “foo” and simply doing:

update sometable set id = gen_id(some_table_id_gen, 1);

have the same result?

With regards,

Martijn Tonies
Upscene Productions
http://www.upscene.com

Download Database Workbench for Oracle, MS SQL Server, Sybase SQL
Anywhere, MySQL, InterBase, NexusDB and Firebird!



From: mailto:firebird-support@yahoogroups.com 
Sent: Monday, September 22, 2014 2:36 PM
To: firebird-support@yahoogroups.com 
Subject: [firebird-support] Re: How to populate a new table column with a 
INTEGER sequence?




Hi to all,

This is one approach (Maybe could be done one more efficient):

/**
* Firebird 2.5
*/

-- 1.Create new fields
ALTER TABLE some_table
  ADD id INTEGER DEFAULT 0 NOT NULL,
  ADD foo_dummy CHAR(1);

-- 2.Create generador
CREATE GENERATOR some_table_id_gen;

-- 3.Create temp trigger
SET TERM ^ ;
CREATE TRIGGER some_table_temp_trgr FOR some_table
ACTIVE BEFORE UPDATE POSITION 0
AS 
BEGIN 
  new.id = GEN_ID(some_table_id_gen, 1);
END^
SET TERM ; ^ 

-- 4.Update foo_dummy field and so set the sequency
--   into field ID
UPDATE some_table SET foo_dummy = '1';

-- 5.Drop temp trigger and foo_ new PK
ALTER TABLE some_table ADD CONSTRAINT some_table_pk PRIMARY KEY (ID);

-- 9.Create new trigger for mantaining new PK
SET TERM !! ;
CREATE TRIGGER some_table_set_id FOR some_table
BEFORE INSERT POSITION 0 AS
BEGIN
  NEW.id = GEN_ID(some_table_id_gen, 1);
END !!
SET TERM ; !!

/* */

Best regards,

Hernando.




  • ... duque.herna...@yahoo.com [firebird-support]
    • ... duque.herna...@yahoo.com [firebird-support]
      • ... 'Martijn Tonies (Upscene Productions)' m.ton...@upscene.com [firebird-support]
        • ... duque.herna...@yahoo.com [firebird-support]

Reply via email to