RE: Best Way to Auto Increment with Oracle
From: Ron Reidy (Ron.Reidy_at_arraybiopharma.com)
Date: 06/16/04
- Next message: Ken Gaul: "RE: Best Way to Auto Increment with Oracle"
- Previous message: Peter J. Holzer: "Re: Best Way to Auto Increment with Oracle"
- Maybe in reply to: Jim: "Best Way to Auto Increment with Oracle"
- Next in thread: Ken Gaul: "RE: Best Way to Auto Increment with Oracle"
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Date: Wed, 16 Jun 2004 09:58:04 -0600 To: "Peter J. Holzer" <hjp@wsr.ac.at>, <dbi-users@perl.org>
Yes, using the SP hides the details. Getting the value just inserted
via currval is not guaranteed to return the value you just fetched.
Better to use 'insert ... returning col into' to get the value used in
your session's insert statement.
-----------------
Ron Reidy
Senior DBA
Array BioPharma, Inc.
-----Original Message-----
From: Peter J. Holzer [mailto:hjp@wsr.ac.at]
Sent: Wednesday, June 16, 2004 9:46 AM
To: dbi-users@perl.org
Subject: Re: Best Way to Auto Increment with Oracle
On 2004-06-16 09:14:25 -0600, Reidy, Ron wrote:
> Better? Maybe. Consider.
>
> Your program connects via SQL*net to the DB. At insert time, you need
to fetch a sequence, so you issue 'select seq.nextval from dual'. Seems
harmless enough until ...
>
> 1. The select statement must be passed across the SQL*Net connection.
> 2. The statement must be parsed. Maybe the worst you will have here
is a soft parse, but non the less, you are using the CPU for this.
> 3. The statement is executed and the fetch occurs.
> 4. The result is passed back to your program.
> 5. You bind the value (hopefully) to your statement handle.
> 6. You then execute the insert statement.
>
> If you use a BEFORE INSERT trigger to fetch the sequence, you will
eliminate steps 1, 2, 3, 4, 5 from the flow.
You can get the next value from a sequence in the insert statement (see
my previous mail in this thread), so with or without the trigger, you
have to parse (once) and execute (possibly many times) only the insert
statement.
The difference is:
With a trigger, you hide the details of the sequence from the insert
statement.
This makes the insert statement simpler and more portable. OTOH, you
don't know which value you just inserted (you can get at it with "select
$sequence.currval from dual" but then you lose these advantages).
hp
-- _ | Peter J. Holzer | Shooting the users in the foot is bad. |_|_) | Sysadmin WSR / LUGA | Giving them a gun isn't. | | | hjp@wsr.ac.at | -- Gordon Schumacher, __/ | http://www.hjp.at/ | mozilla bug #84128 This electronic message transmission is a PRIVATE communication which contains information which may be confidential or privileged. The information is intended to be for the use of the individual or entity named above. If you are not the intended recipient, please be aware that any disclosure, copying, distribution or use of the contents of this information is prohibited. Please notify the sender of the delivery error by replying to this message, or notify us by telephone (877-633-2436, ext. 0), and then delete it from your system.
- Next message: Ken Gaul: "RE: Best Way to Auto Increment with Oracle"
- Previous message: Peter J. Holzer: "Re: Best Way to Auto Increment with Oracle"
- Maybe in reply to: Jim: "Best Way to Auto Increment with Oracle"
- Next in thread: Ken Gaul: "RE: Best Way to Auto Increment with Oracle"
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Relevant Pages
|