Adding a surrogate key to an Oracle table

This works for me for a mid-sized table.

  1. ALTER TABLE foo ADD ( foo_id integer )  
  2. /  
  3. CREATE SEQUENCE foo_id_seq  
  4. /  
  5. CREATE OR REPLACE TRIGGER before_update_foo  
  6.    BEFORE INSERT OR UPDATE  
  7.    ON FOO  
  8.    REFERENCING OLD AS old NEW AS new  
  9.    FOR EACH ROW  
  10. DECLARE  
  11.    l_foo_id   foo.foo_id%TYPE;  
  12. BEGIN  
  13.    IF :new.foo_id IS NULL  
  14.    THEN  
  15.       SELECT   foo_id_seq.nextval INTO l_foo_id FROM dual;  
  16.   
  17.       :new.foo_id := l_foo_id;  
  18.    END IF;  
  19. END;  
  20. /  
  21. UPDATE   foo  
  22.    SET   foo_id = NULL  
  23. /  
  24. COMMIT  
  25. /  
  26. CREATE UNIQUE INDEX foo_ak  
  27.    ON foo( foo_id )  
  28. /  
  29. ALTER TABLE foo MODIFY ( foo_id NOT NULL )  
  30. /  
  31. ALTER TABLE foo ADD (CONSTRAINT foo_ak UNIQUE (foo_id))  
  32. /  

Leave a Reply

Your email address will not be published. Required fields are marked *

Scroll to top