Skip to main content

Oracle database use of sequences for incrementing values.

We always find a need to use incremental sequence for our table data columns like primary key or other unique keys. Examples of such fields could be id fields like employee id or order sequences for order processing in OLTP databases.

Oracle provides very efficient non blocking way of getting and generating these new sequences with a database object called sequence.

Sequence should be created and used as follows.

CREATE SEQUENCE employee_id_seq
 START WITH     10000   -- Start your sequence with 10000
 INCREMENT BY   1       -- Sequence would be incremented by 1 when nextvalue is fetched from sequence
  NOCYCLE;              -- Oracle sequence would not restart 
                        -- If you want sequence to start over after N then specify maxvalue N clause in the sequence

Full syntax of sequence statement

Once we are done creating sequence object in database next thing is pretty straightforward.
You can use your sequence immediately in insert statement.

INSERT INTO EMPLOYEES (EMPLOYEE_ID , FIRST_NAME,LAST_NAME ) 
VALUES
(employee_id_seq.NEXTVAL , 'PATRICK' , 'HARRIS');

If you are using Oracle Forms or some other tool that generates Inserts for you and if you do not have direct control then consider writing a BEFORE INSERT Trigger that would call the sequnce.nextvalue and provide the next sequence to your insert.
Ex.

CREATE OR REPLACE TRIGGER employees_pre_ins
BEFORE INSERT ON employees
FOR EACH ROW
begin
  SELECT employee_id_seq.NEXTVAL
  INTO   :new.employee_id
  FROM   dual;
END;
/

Comments

Popular posts from this blog

Use the Microsoft Visual Studio Code(VScode) with Java Maven project.

The VS Code is the go to editor now a days for the latest technologies and scripting options. VS Code as we all know works seamlessly with Python and JavaScripts, and offcourse the .NET family. But VS Code has many extensions which makes it big Java IDEs run for their money. Lets explore what we could do with VSCode if we are Java developer. Install VScode , no brainer. Jus type download Visual Studio code in google. Alrright once we have VSCode. Open it. Install Maven and Java extension. 2. Go to files and a small window will now appear on left side navigation bar. 3. Select New Maven project. 4. Select the archtype from dropdown. 5. As usual input the grpid, artifactid etc. 6. Done. Go through a video which has much detailed navigation flow. Till next time !!!

Get a PLSQL code dump of all your Oracle database code.

I used to work as a part time DBA and when I was doing my supposedely menial tasks like unlocking accounts. One of the frequent request was to get an code for the object a Function or Package or Trigger. While this was trivial task to get an single object code it had to be quick. I never bothered to write any code or script to get that.  However one day a developer came and asked me for a code dump for a whole schema ( We had 2500 eligible objects). What he wanted was the code dump for every plsql object stored in the system. This included triggers, functions, procedures , packages. So I searched the internet and came up with a code to do that. It was fairly small 10 liner code which was astonishing. Curiously I never saw the function used anywhere. The function clob2file is from package dbms_xslprocessor. This one is available in oracle 11g so if you ever found yourself yearning to dump a clob object to file you should try using this. There was just a little problem I wante...

Oracle bulk insert with a single insert statement ignoring errors.

Starting from Oracle database release 10g you can have DML's succeed with partial data failures. How ? Default reaction of any bulk Insert or Update to an excption is atomic failure. i.e. If you were inserting 100 rows and one of the row fails to insert due to some constraint violation or duplicate records or any other check stuff. Your whole Insert fails. Of course you can write a quick PLSQL block with a LOOP and a null exception handler/logger which will basically ignore the exception or write it down somewhere and carry out your next loop iteration insertion. But first this makes you write the code for a loop and is more resource hogging. You should not have to start coding blocks everytime you want such data insertion. Below is how you can handle it. First you need to create a table for error logging it can be in any schema. Ex. EXECUTE DBMS_ERRLOG.CREATE_ERROR_LOG('EMPLOYEES' , 'EMPL_ERROR'); -- FOR CREATING ERROR LOG TABLE : TO LOG ERRORS DURING...