Sequence-less/Trigger-less Oracle Auto Increment

Oracle sucks. Well, not totally, but it fails in a lot of places where MySQL is sexy. One little gem of an irritation is the lack of an auto_increment attribute associated with fields. Instead you have to make use of Oracle Sequences/Triggers which adds a whole layer of complexity on the creation and insertion into a simple table.

I’m not quite sure on this statement’s efficiency, but here’s my solution:

INSERT INTO table (id,name) (SELECT CASE WHEN MAX(id) IS NULL THEN 1 ELSE MAX(id)+1 END, ‘bork’ FROM table);

EDIT: It seems that this isn’t such a good idea, after help from my friendly neighborhood DBA.

Discuss This Article


11 Responses to “Sequence-less/Trigger-less Oracle Auto Increment”

  1. pingback pingback:
    Life After Coffee » How to Create Auto Increment Columns in Oracle

    [...] Many will gripe about this not being a standard feature in Oracle, but when it’s as easy as two more commands after your CREATE TABLE command I can’t see any good reason to use fancy SQL on every insert. [...]

    Reply to this comment.
    1
  2. Avatargaurav

    Great work man,was a very useful help for me.
    This statement can be used even when we are using VB6,oracle connectivity

    Reply to this comment.
    2
  3. AvatarTim

    Sorry, no.

    This won’t work in an envioronment where more than one transaction is open at once. That means you should never ever use it because it’s bad practice and not scalable. (You never really know where it will end up.)

    If two users do this at the nerly same time, more specifically if a second user does their insert after the first but before the first user commits, the second commit will fail with a constraint violation. That is, unless the column isn’t unique, in which case you’ll just get duplicate values.

    Reply to this comment.
    3
  4. AvatarMatt
    Author Comment

    Yup…I know that already. Read the post again and note the last line ;) Thanks anyhow.

    Reply to this comment.
    4
  5. AvatarSije de Haan

    I don’t understand. This problem can be solved by using sequences. But what if two overlapping transactions want to add a value to a field. One of the two updates will get lost?

    Reply to this comment.
    5
  6. pingback pingback:
    Life After Coffee » Re: The web is becoming a dictatorship of idiots - Part 1

    [...] Here’s a good example where Matt posted what he thought was a good idea of how to create auto-increment fields in Oracle without the use of Triggers. [...]

    Reply to this comment.
    6
  7. AvatarLemine

    I agree with you that Oracle really sucks. MySQL is a better choice.

    Reply to this comment.
    7
  8. Avatarneel_basu

    MySQL also sucks at the time of Relation database Modeling with references but thats 100 times easier that this auto increamentation technique of Oracle.
    So I think PostgreSql is easiest and Simplest and the best one
    can host a Huge ammount of Data like Oracle
    NOT a MEMORY HOG Like Oracle
    and Its SQL is easier that anything else.

    Reply to this comment.
    8
  9. AvatarIngas

    Not much fun of triggers, but Oracle triggers is total crap.
    Because of FOR EACH ROW
    Disgusting.

    Reply to this comment.
    9
  10. Avatarralph

    How hard from Oracle to just add the keyword AUTO_INCREMENT or IDENTITY to the identity field? and forget about this sequence/trigger crap?

    Reply to this comment.
    10
  11. AvatarAdnan Hashmi

    /* Create its trigger */
    CREATE SEQUENCE TIME_COMPANY_COMPANYID_SEQ
    START WITH 1
    INCREMENT BY 1

    /* My table is **/
    CREATE TABLE TIME_COMPANY
    (
    COMPANYID integer NOT NULL ,
    COMPANYNAME varchar2 (100) NOT NULL
    )

    /* And its trigger would be like */
    CREATE OR REPLACE TRIGGER TIME_COMPANY_TR
    BEFORE INSERT ON TIME_COMPANY
    FOR EACH ROW
    DECLARE TEMP_NO INT;
    BEGIN
    SELECT TIME_COMPANY_COMPANYID_SEQ.NEXTVAL INTO :NEW.COMPANYID FROM DUAL;
    END;

    Regards
    Adnan Hashmi.

    Reply to this comment.
    11

Leave a Reply

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Comment Preview:

 (7228) - oracle autoincrement (48) - oracle auto increment (41) - auto increment in oracle (25) - auto increment oracle (20) - oracle (16) - oracle auto_increment (13) - trigger sequence (11) - oracle auto-increment (9) - oracle sql autoincrement (9) - auto_increment oracle (8) - oracle trigger sequence (8) - oracle sequence trigger (7) - autoincrement in oracle (7) - oracle autoincrement trigger (7) - sql insert max (7) - oracle 10g autoincrement (7) - oracle insert sequence (7) - oracle autoinc (7) - oracle auto increment id (6) - auto_increment in oracle (6) - trigger to generate auto id in oracle (6) - oracle auto increment column (6) - oracle sql increment (5) - oracle sequence (5) - CREATE TRIGGER SEQUENCE (5) - oracle id autoincrement (5) - sequence oracle (4) - oracle ID auto increment (4) - auto incremento oracle (4) - oracle 10g auto_increment (4) - auto generate increment in table in oracle (4) - autoincrement oracle without triggers (4) - increment a number in sql oracle (4) - Oracle 10g trigger sequence (4) - how do we get autoincrement of a number field in oracle (4) - insert (3) - autoincrement oracle (3) - oracle auto increment field (3) - oracle triggers sequences (3) - oracle trigger autoincrement (3) - SQL Autoincrement Oracle (3) - auto incrementing in oracle (3) - oracle autoincrement fields (3) - oracle autoincrement field (3) - autoincrement field Oracle (3) - oracle sequence field (3) - oracle sequence and triggers (3) - oracle sequence triggers (3) - oracle select increment (3) - create auto increment oracle (3) - sql oracle auto_increment (3) - autoinc oracle (3) - oracle update increment (3) - ORACLE sequence table (3) - oracle insert max (3) - oracle auto increment number (3) - insert max oracle (3) - create trigger if inserting seq (3) - Oracle increment number (3) - auto increment number in oracle (3) - insert into select max 1 oracle (3) - oracle auto generate number (3) - oracle sequence read and increment (3) - auto unique id oracle sql insert (3) - oracle auto identity (3) - oracle auto increment field row (3) - Oracle increment (2) - Oracle ID Increment (2) - AUTO_INCREMENT SQL ORACLE (2) - sequence in oracle (2) - oracle trigger (2) - oracle sequence max (2) - autoincrement fields in oracle (2) - oracle autoincrement column (2) - auto_increment oracle trigger (2) - oracle autoincrement id (2) - autoincrement column oracle (2) - oracle select max trigger (2) - TRIGGER AND SEQUENCE (2) - trigger increment (2) - oracle increment command (2) - trigger insert sequence (2) - increment in Oracle SQL (2) - create table auto increment oracle (2) - oracle increment sql (2) - sequence oracle insert (2) - insert trigger sequence (2) - trigger with sequence (2) - oracle autoincrement max (2) - autoincrement column in oracle (2) - sequence in triggers oracle (2) - oracle auto generated id (2) - auto incrementation in oracle (2) - oracle auto increment on update (2) - create trigger oracle sequence (2) - oracle 11 auto_increment (2) - oracle 10 auto_increment (2) - How to make a field as an auto_increment field in oracle (2) - oracle auto field (2) - oracle- trigger-insert (2) - oracle auto-increment field (2) - Oracle autoincrement field in table with a sequence (2) - oracle trigger comment (2) - inserting sequence value to a field oracle (2) - increment id by 1 in oracle 10g (2) - SQL trigger with auto increment (2) - autoincrement in oracle 10g command (2) - inserting unique id at the time of insertion or updation in oracle (2) - oracle create sequence max (2) - how to make trigger for auto generated column oracle 10g (2) - find max value of a autogenerated field value in oracle (2) - creating sequence number field oracle 10g (2) - oracle trigger insertion (2) - Using sequence in inserts without triggers (2) - database auto increment oracle (2) - oracle insert autoincrement value (2) - oracle how to increment value of field (2) - how auto increment value in oracle (2) - how to create an oracle sequence for a column in a oracle table (2) - oracle CREATE TABLE sequence trigger (2) - oracle autogenerate SQL table attribute (2) - auto_increment oracle sequence trigger example (2) - oracle create sequence with max table value (2) - Oracle trigger insert from select (2) - Oracle auto-increment trigger select nextval (2) - set auto increment in oracle (2) - oracle create table identity (2) - ORACLE create auto increment identify column (2) - oracle tiene auto incremento (2) - insert value sequence table trigger oracle (2) - auto sequence in oracle data insertion (2) - autogenerated columns in oracle (2) - oracle select trigger code (2) - how to add sequence on column in a oracle table (2) - sql select autoinc (2) - autoincrement,oracle 10g (2) - auto sequence and trigger (2) - oracle table sequence auto increment (2) - How to create an Auto-Increment field in oracle (2) - oracle autoid how (2) - identity FIELD oracle (2) - create auto increment filed in oracle10g (2) - oracle autoincrement 10g (2) - oracle update with increment (2) - oracle autoincrementing fields (2) - sql auto seq on id (2) - trigger to insert from sequence (2) - auto incremental ROW ID oracle (2) - oracle commands for auto generating id (2) -