#!/usr/bin/perl use strict; use warnings; use DBI; use DBD::ODBC; use DBI qw(:sql_types); use Data::Dumper; my $username = 'user'; my $password = "password"; my $stat; # connect my $oracle_db = $ENV{ORACLE_DB}; my $dbh; eval { $dbh = DBI->connect( "DBI:ODBC:$oracle_db", "$username", "$password" ); }; unless ($dbh) { die "couldn't connect, $DBI::errstr"; } my $sql = 'INSERT INTO xyz.table (id,num, name,descr) VALUES (?,?,?,?)'; my $sth = $dbh->prepare($sql); $stat = $sth->execute("302","1","Next",'descr 4'); print Dumper \$stat; $stat = $sth->execute("302","1","Another",' '); print Dumper \$stat; $stat = $sth->execute("302","1","Yet",''); print Dumper \$stat; $stat = $sth->execute("302","1","Again",undef); print Dumper \$stat; $sth->bind_param(1,"302",SQL_VARCHAR); $sth->bind_param(2,"1",SQL_VARCHAR); $sth->bind_param(3,"AACH",SQL_VARCHAR); $sth->bind_param(4,"",SQL_VARCHAR); $stat = $sth->execute(); print Dumper \$stat; exit; #### DBD::ODBC::st execute failed: [DataDirect][ODBC Oracle Wire Protocol driver] Data type for parameter 4 has changed since first SQLExecute call. (SQL-HY000) (DBD: st_execute/SQLExecute err=-1) at question.pl line 33.