/usr/local/CPAN/DBIx-AnyDBD/Example/DB/Oracle.pm
# $Id: Oracle.pm,v 1.1 2001/08/02 16:32:22 matt Exp $
package Example::DB::Oracle;
use strict;
sub _init
{
my $self = shift;
$self->get_dbh->{LongReadLen} = $self->config_value('LongReadLen') || ( 2**16 - 1 );
$self->get_dbh->{LongTruncOk} = 1;
# Since the default date picture format for a given Oracle database
# cannot be known in advance, its best to set it to something
# consistent and easy to deal with.
$self->do_sql( sql => q|ALTER SESSION SET NLS_DATE_FORMAT = 'YYYYMMDDHH24MISS'| );
}
sub sql_date
{
my $self = shift;
my $time = localtime( shift || time );
return $time->strftime('%Y%m%d%H%M%S');
}
sub _prepare_and_execute
{
my $self = shift;
# ::Utils::check_params( @_,
# mandatory => ['sql'],
# optional => [ qw( begin limit bind ) ],
# );
my %p = @_;
my @bind = exists $p{bind} ? ( ref $p{bind} ? @{ $p{bind} } : $p{bind} ) : ();
my $sth;
eval
{
$sth = $self->get_dbh->prepare_cached( $p{sql} );
$sth->execute(@bind);
};
if ($@)
{
Example::Exception::SQL->throw( -text => $@,
-sql => $p{sql},
-bind => \@bind );
}
return $sth;
}
sub _outer_join_operator
{
return '(+)=';
}
sub get_next_pk
{
my $self = shift;
# ::Utils::check_params( @_,
# mandatory => [ qw( table ) ],
# );
my %p = @_;
my $id = $self->get_one_row( sql => "SELECT $p{table}_seq.NEXTVAL FROM DUAL" );
$self->{last_id} = $id;
return $id;
}
sub last_id
{
my $self = shift;
return delete $self->{last_id};
}
1;