1 package DBIx::Class::PK::Auto::Oracle;
6 use base qw/DBIx::Class/;
8 __PACKAGE__->load_components(qw/PK::Auto/);
12 $self->get_autoinc_seq unless $self->{_autoinc_seq};
13 my $sql = "SELECT " . $self->{_autoinc_seq} . ".nextval FROM DUAL";
14 my ($id) = $self->storage->dbh->selectrow_array($sql);
21 # return the user-defined sequence if known
22 return $self->sequence if ($self->sequence);
24 # look up the correct sequence automatically
25 my $dbh = $self->storage->dbh;
27 SELECT trigger_body FROM ALL_TRIGGERS t
28 WHERE t.table_name = ?
29 AND t.triggering_event = 'INSERT'
30 AND t.status = 'ENABLED'
32 # trigger_body is a LONG
33 $dbh->{LongReadLen} = 64 * 1024 if ($dbh->{LongReadLen} < 64 * 1024);
34 my $sth = $dbh->prepare($sql);
35 $sth->execute( uc($self->_table_name) );
36 while (my ($insert_trigger) = $sth->fetchrow_array) {
37 if ($insert_trigger =~ m!(\w+)\.nextval!i ) {
38 $self->{_autoinc_seq} = uc($1);
41 unless ($self->{_autoinc_seq}) {
42 die "Unable to find a sequence INSERT trigger on table '" . $self->_table_name . "'.";
50 DBIx::Class::PK::Auto::Oracle - Automatic Primary Key class for Oracle
56 This class implements autoincrements for Oracle.
60 Andy Grundman <andy@hybridized.org>
61 Scott Connelly <scottsweep@yahoo.com>
65 You may distribute this code under the same terms as Perl itself.