Joe,

You called error handling on the statement handle instead of the database handle

$ErrorString = $dbh->errstr();
etc.

Paul.


"Condle, Joseph P" wrote:

> The following is an insert script I working on.  I need to trap the unique 
>constraint error and send a message back to the user.  I am really confused.  I have 
>read the error handling chapter of the O'reilly Perl DBI book, but I just don't get 
>it.  I must have some kind mental block.  If I could get a working example hopefully 
>the light will come on.  This will eventually work with a html Form.
> Thanx
>
> Joe Condle
>
> Script started on Fri Apr 12 06:43:36 2002
> $ more test.pl
> #!/usr/bin/perl -w
> #
> #
> use strict;
> use DBI qw(:sql_types);
>
> my $dbh = DBI->connect ( 'dbi:Oracle:xxxxxxxxxxx',
>                         'xxxxxx',
>                         'xxxxx',
>                         {
>                           RaiseError => 0,
>                           PrintError => 1,
>                           AutoCommit => 0
>                         }
>                        ) || "Database connection not made :$DBI::errstr";
> my $ssn    = '987654321';
> my $fname  = 'Mike';
> my $lname  = 'Beer';
> my $city   = 'Pgh';
> my $state  = 'Pa';
> my $zip    = '98765';
>
> my $sql = qq{ INSERT INTO employee VALUES (?, ?, ?, ?, ?, ?)};
> my $sth = $dbh->prepare( $sql );
>
> $sth->bind_param(1,$ssn,SQL_VARCHAR);
> $sth->bind_param(2,$fname,SQL_VARCHAR);
> $sth->bind_param(3,$lname,SQL_VARCHAR);
> $sth->bind_param(4,$city,SQL_VARCHAR);
> $sth->bind_param(5,$state,SQL_VARCHAR);
> $sth->bind_param(6,$zip,SQL_VARCHAR);
>
> $sth->execute();
> $dbh->commit;
>
> open(DAN, "> debug.txt");
> printf DAN "Errors \n";
> printf DAN "err     - %s \n",sth->err();
> printf DAN "errstr  - %s \n",$sth->errstr();
> printf DAN "state   - %s \n",$sth->state();
> printf DAN "errstr  - %s \n",$DBI::errstr;
> close(DAN);
>
> $sth->finish();
> $dbh->disconnect();
> $ test.pl
> DBD::Oracle::st execute failed: ORA-00001: unique constraint 
>(CONDLE.EMPLOYEE_PK_SSN) violated (DBD ERROR: OCIStmtExecute) at ../test.pl line 35.
> Can't locate object method "err" via package "sth" (perhaps you forgot to load 
>"sth"?) at ./test.pl line 40.
> Issuing rollback() for database handle being DESTROY'd without explicit disconnect().
> $
> $ more debug.txt
> Errors
> $
> script done on Fri Apr 12 06:44:01 2002

Reply via email to