Oracle 10g: Using The Returning Clause With ADOdb

Plymouth State University uses Oracle heavily due to its Student Information System of choice - SungardHE Banner. As such, I play around in Oracle a lot (sometimes a lot more than I'd like) and I occasionally find functionality that seems more cumbersome than it should.

One such item is selecting the last inserted value on an auto-incrementing column.

Historically, when you are inserting into a table with auto incrementing values (via a sequence) you have always been able to grab the last value with a simple SELECT statement (line 22):

SQL:
  1. -- setup a table
  2. CREATE TABLE bork (id INTEGER NOT NULL PRIMARY KEY, DATA VARCHAR2(10) NOT NULL);
  3.  
  4. -- create the sequence
  5. CREATE SEQUENCE sq_bork INCREMENT BY 1 START WITH 1;
  6.  
  7. -- create a trigger for auto-incrementing the sequence'
  8. CREATE OR REPLACE TRIGGER tr_sq_bork
  9. BEFORE INSERT
  10. ON bork
  11. REFERENCING NEW AS NEW
  12. FOR EACH ROW
  13. BEGIN
  14. SELECT sq_bork.NEXTVAL INTO :NEW.id FROM DUAL;
  15. END;
  16. /
  17.  
  18. -- insert a record into the table
  19. INSERT INTO bork (name) VALUES ('Matt');
  20.  
  21. -- retrieve last inserted id
  22. SELECT sq_bork.CURRVAL FROM dual;

As you see there, two statements must be executed to get that new id. The INSERT and the SELECT. Well, as of Oracle 10g you can utilize the RETURNING clause like so:

SQL:
  1. INSERT INTO bork (name) VALUES ('Matt') RETURNING id INTO i_id;

That statement inserts a record into "bork" and returns the value of "id" into the "i_id" variable. Pretty sexy and all with one DML statement. Here's what we do at Plymouth to utilize the RETURNING clause with the PHP library ADOdb:

PHP:
  1. <?php
  2. //do your database object initialization here:
  3. //$db = new ADONewConnection...
  4.  
  5. $sql = "BEGIN INSERT INTO bork (data) VALUES ('Matt') RETURNING id INTO :i_id; END;";
  6. $stmt = $db->PrepareSP($sql);
  7. $db->OutParameter($stmt, $inserted_id, 'i_id');
  8. $db->Execute($stmt);
  9. ?>

Yup. 4 lines of PHP but only 1 statement sent to the database! I'd take the extra lines any day over the latency of data retrieval.

Discuss This Article


One Response to “Oracle 10g: Using The Returning Clause With ADOdb”

  1. AvatarAdam Backstrom

    I did this and it deleted all my Oracle tables. =(

    Reply to this comment.
    1

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:

oracle returning (11) - Oracle insert returning (6) - create (4) - adodb oracle (4) - returning oracle (4) - returning into oracle (4) - oracle returning clause (4) - oracle insert return (4) - insert into RETURNING Oracle 10g (4) - returning clause oracle (3) - oracle insert return id (3) - oracle get inserted id (3) - HOW TO FIND LATEST ID FROM ORACLE TABLE SAMPLE (3) - php oracle insert returning (3) - oracle 10g insert into (3) - oracle insert select * (3) - oracle returning into (3) - returning last id trigger oracle (2) - Insert statement with return clause (2) - insert into returning oracle (2) - adodb insert php (2) - last inserted id oracle (2) - adodb php oracle (2) - Oracle 10g INSERT (2) - insert into table using php and returning key (2) - last clause in oracle (2) - oracle select last records (2) - oracle get id of inserted record (2) - ORACLE plsql select last id (2) - insert oracle returning id (2) - triggers in oracle10g with insert statements (2) - oracle 10g sequence get value (2) - get latest id oracle ado.net (2) - Select Oracle 10g (2) - oracle select increment number (2) - oracle 10g adodb (2) - returning id into (2) - how to find last inserted record in a table in oracle 10g (2) - oracle 10g ado (2) - oracle returning clause php (2) - insert select * oracle (2) - RETURNING clause (2) - php oracle last id (2) - how to find the record id in oracle (2) - select 1 from oracle (2) - ADO DB get last inserted row (2) - oracle last inserted id (2) - last row inserted php adodb (2) - java insert returning (2) - oracle 10g returning (2) - adodb triggers (2) - how a trigger can use the inserted values in oracle10 (2) - oracle select last (2) - php oracle returning (2) - get sequence number after insert oracle (2) - Oracle insert into return (2) - sqldeveloper return key (2) - oracle get id after insert (2) - oracle last value trigger (2) - php oracle returning into (2) - oracle select incrementing number (2) - oracle query insert return (2) - How to get Oracel to auto increment a number using SQL (2) - oracle 10g autoincrement (2) - how to get new inserted id in oracle table (2) - oracle RETURNING ID INTO (1) - insert into oracle sequence return id (1) - oracle plsql last insert id (1) - java insert into table and return auto sequence number (1) - oracle query select last inserted row (1) - oracle insert one value (1) - adodb php get last inserted key (1) - oracle select last insert id (1) - PL/SQL Get ID of last inserted row (1) - oracle return two (1) - HOW TO INSERT ONE RECORD FROM A TABLE IN ORACLE (1) - oracle get primary key insert sequence (1) - php oracle last insert (1) - adodb for oracle10 (1) - oracle procedure get id after insert (1) - adodb insert id (1) - java INSERT INTO RETURNING id; (1) - Oralce RETURNING clause and .NET (1) - select last oracle (1) - fetch last record from a table in Oracle (1) - get last inserted record oracle (1) - oracle returning sequence on insert (1) - can oracle 10g procedures return records (1) - select last inserted record using rowid in oracle query (1) - Return two table in oracle 10g (1) - inserting values using trigger in oracle 10g (1) - oracle select return insert (1) - oracle get last insert ID (1) - oracle trigger add record (1) - get id of a record i justed inserted into a oracle table (1) - last insert id oracle trigger (1) - how it get the last record id inserted from a trigger in oracle 10g (1) - create trigger get last inserted record (1) - oracle insert into with return clause (1) - oracle sql insert returning java (1) - autoinc last insert number oracle (1) - select in insert plsql (1) - return inserted id from an insert statement in pl\sql (1) - retrieve certain value from a particular value Oracle 10G data type (1) - oracle sql select one record (1) - oracle returning new ID (1) - create trigger oracle on table 10g (1) - oracle returning into ado.net (1) - insert oracle returning id into variable] (1) - oracle return key (1) - how to get last record in oracle database (1) - oracle howto get last inserted key (1) - get lastest ID on oracle (1) - Auto Increment pl/sql oracle (1) - finding last inserted record id in Oracle (1) - adodb getid php (1) - select latest row inserted into table using rowid in plsql (1) - PHP PL/SQL RETURNING clause (1) - get sequence value inserted by trigger oracle (1) - HOW TO GET SEQUENCE NUMBER FROM ORACLE IN JAVA (1) - oracle returning into from dual (1) - insert in oracle 10g (1) - oracle insert select primary key (1) - ado php oracle (1) - sequences oracle 10g (1) - ORACLE SEQUENCE SELECT ONE STATEMENT (1) - oracle retrieve id from inserted record -"SQL server (1) - oracle getting id of insert (1) - oracle retrieve id from inserted record (1) - with clause oracle 10i (1) - php oracle return last id (1) - select using rowid in oracle 10g (1) - problem returning value with php adodb (1) - php oracle returning into : (1) - returning id into :newid (1) - adodb insert php last key (1) - how to take last inserted record in oracle table (1) - RETURNING clause oracle to return old value (1) - last insert id php adodb (1) - returning rowid after insert oracle (1) - oracle returning clause example (1) - oracle returning trigger (1) - oracle ado IN clause (1) - adodb oracle insert id (1) - getting the id of the inserted record oracle (1) - select into oracle sequence (1) - how to increment the id using php (1) - create triggers on insert in oracle 10g (1) - oracle trigger insert null value (1) - last inserted id oracle php (1) -