And what are the contents of the sql file?

Also, I know very little about Netezza....I'm going to assume that it
supports placeholders, but does the ODBC Driver for it?

On 4/2/06, Peter Loo <[EMAIL PROTECTED]> wrote:
>
>
> Hi Jeffrey,
>
> Here is the calling code:
>
> Source database is Oracle using Oracle driver while the destination
> database is Netezza using ODBC driver.  When all fields are populated,
> the same code appears to work.
>
>         ($s_stmtType, $s_sqlString) = sub_readSQLFile($s_SQL);
>         $s_sth = sub_prepare($s_dbh, qq{$s_sqlString});
>         $s_sth = sub_execute($s_dbh, $s_sth);
>         $s_arrayref = sub_fetchall_arrayref($s_dbh, $s_sth);
>
>         $d_sqlString = sub_getTblCols($d_dbh, $d_dbDriver, d_tblName, "
> ");
>         $d_sth = sub_prepare($d_dbh, qq{$d_sqlString});
>         $d_sth = sub_execute($d_dbh, $d_sth);
>         $d_arrayref = sub_fetchall_arrayref($d_dbh, $d_sth);
>         $d_sqlString = sub_insert($d_tblName, $d_arrayref);
>         $d_sth = sub_prepare($d_dbh, qq{$d_sqlString});
>         foreach $arrayref (@{$s_arrayref}) {
>           if ($count >= $commitPoint) {
>             $d_dbh->commit || die "$DBI::errstr\n";
>             $count = 0;
>             }
>           $d_sth = sub_executeBind($d_dbh, $d_sth, $arrayref);
>           $count++;
>           }
>         }
>       sub_disconnect($s_dbh);
>       sub_disconnect($d_dbh);
>
> The sub-routines that the above code call are:
>
>   sub sub_connect($$$$) {
>     my ($dbDriver, $dbName, $dbUser, $dbPass) = @_;
>     my $dbh = DBI->connect("dbi:$dbDriver:$dbName", "$dbUser",
> "$dbPass",
>                             { PrintError => 1, RaiseError => 1 }
>                           ) || die "$DBI::errstr\n";
>     return($dbh);
>     }
>
>   sub sub_disconnect($) {
>     my ($dbh) = @_;
>     $dbh->disconnect || die "$dbh::errstr\n";
>     }
>
>   sub sub_execute($$) {
>     my ($dbh, $sth) = @_;
>     $sth->execute() || die "$dbh::errstr";
>     return($sth);
>     }
>
>   sub sub_prepare($$) {
>     my ($dbh, $sqlString) = @_;
>     print "sqlString is: $sqlString\n";
>     my $sth = $dbh->prepare(qq{$sqlString}) || die "$dbh::errstr\n";
>     return($sth);
>     }
>
>   sub sub_readSqlFile($) {
>     my ($sqlFile) = @_;
>     my $stmtType = "";
>     my $sqlString = "";
>     open(FH, "$sqlFile") || die "$!\n";
>     while (<FH>) {
>       chomp;
>       s/--.*$//;
>       next if /^\//;
>       next if /^(\s)*[Ss][Pp][Oo][Oo][Ll]/;
>       next if /^(\s)*--/;
>       next if /^(\s)*$/;
>       next if /^(\s)*[Ss][Ee][Tt]/;
>       next if /^(\s)*[Ee][Xx][Ii][Tt]/;
>       next if /^(\s)*[Qq][Uu][Ii][Tt]/;
>       print "$_\n";
>       $sqlString = "$sqlString" . "$_";
>       }
>     close(FH);
>     $stmtType = "insert" if $sqlString =~
> /^(\s)+[Ii][Nn][Ss][Ee][Rr][Tt]/;
>     $stmtType = "select" if $sqlString =~
> /^(\s)+[Ss][Ee][Ll][Ee][Cc][Tt]/;
>     $stmtType = "delete" if $sqlString =~
> /^(\s)+[Dd][Ee][Ll][Ee][Tt][Ee]/;
>     $stmtType = "update" if $sqlString =~
> /^(\s)+[Uu][Pp][Dd][Aa][Tt][Ee]/;
>     $stmtType = "plsql" if $sqlString =~ /^(\s)+[Bb][Ee][Gg][Ii][Nn]/;
>     $sqlString =~ s/(\s)*;(\s)*$//;
>     return($stmtType, qq{$sqlString});
>     }
>
>   sub sub_getTblCols($$$$) {
>     my ($dbh, $dbDriver, $tblName, $owner) = @_;
>     my ($sqlString);
>     if (ucfirst($dbDriver) eq "Oracle") {
>       $sqlString = "SELECT COLUMN_NAME FROM ALL_TAB_COLUMNS WHERE";
>       $sqlString = "$sqlString" . " TABLE_NAME = UPPER(\'$tblName\')";
>       $sqlString = "$sqlString" . " AND OWNER = UPPER(\'$owner\')";
>       $sqlString = "$sqlString" . " ORDER BY COLUMN_ID";
>       }
>     elsif (uc($dbDriver) eq "ODBC") {
>       $sqlString = "select column_name from all_tab_columns where";
>       $sqlString = "$sqlString" . " table_name = lower(\'$tblName\')";
>       $sqlString = "$sqlString" . " order by column_sequence_nbr";
>       }
>     else {
>       print "This database driver $dbDriver is not supported at this
> time.\n";
>       exit(666);
>       }
>     return($sqlString);
>     }
>
>   sub sub_insert($$) {
>     local ($tblName, $columns) = @_;
>     my ($sqlString, $delimCols, $bindVars);
>     $delimCols = join(', ', @{$columns});
>     $bindVars = join ', ', ('?') x $#{$columns};
>     $sqlString = "insert into " . $tblName . " (" . $delimCols . ")
> values" . " (" . $bindVars . ")";
>     return($sqlString);
>     }
>
>   sub sub_fetchallrows($$) {
>     my ($dbh, $sth) = @_;
>     my ($arrayref);
>     $arrayref = $sth->fetchall_arrayref() || die "$dbh::errstr\n";
>     return($arrayref);
>     }
>
>   sub sub_executeBind($$$) {
>     local ($dbh, $sth, $bindVar) = @_;
>     $sth->execute(@$bindVar) || die "$dbh::errstr";
>     return($sth);
>     }
>
> --- Jeffrey Seger <[EMAIL PROTECTED]> wrote:
>
> > In order to figure out what's going awry, I'd need to see some code.
> > Preferably the minimum amount necessary to replicate the error.
> >
> > Also, do you have multiple statement handles attached to this dbh?
> > Try
> > printing $sth->{Statement} rather than $dbh->{Statement}. Are you
> > checking
> > for errors at the prepare?
> >
> >
> >
> > On 4/1/06, Peter Loo <[EMAIL PROTECTED]> wrote:
> > >
> > > Hi Martin,
> > >
> > > The value for $dbh->{Statemet} is as follows:
> > >
> > > insert into p_dlvrb_study_attributes (dlvrb_gid, study_gid,
> > client_gid,
> > > slsfc_gid, mkt_def_gid, mkt_def_desc, store_panl_gid,
> > > study_anlys_typ_cde, extnd_lkbck_strt_dte, cohrt_strt_dte,
> > > cohrt_end_dte, study_end_dte, lkbck_prd_days_nbr,
> > study_prd_days_nbr,
> > > dlvry_freq_typ_cde, dlvrb_error_flg_desc, std_err_thrhld_nbr,
> > > std_err_ind, actl_dlvry_dte, dlvry_frmt_typ_desc, study_nam,
> > > study_anlys_desc, slsfc_nam, client_long_nam, std_err_rsn_desc,
> > > sob_clsfy_row_cnt, sob_prctr_demo_row_cnt, sob_pay_typ_row_cnt,
> > > sob_sw_dtl_row_cnt, sob_prctr_row_cnt, sob_unq_ptnt_row_cnt,
> > > pc_clsfy_row_cnt, pc_ptnt_demo_row_cnt, pc_prctr_row_cnt,
> > > mkt_cnfgr_gid, itime_prjct_id, client_cntct_nam, dlvrb_nbr) values
> > (?,
> > > ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?,
> > ?, ?,
> > > ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
> > >
> > > Thanks.
> > >
> > > Peter
> > >
> > >
> > > --- "Martin J. Evans" <[EMAIL PROTECTED]> wrote:
> > >
> > > > Peter Loo wrote:
> > > >
> > > > >Hi,
> > > > >
> > > > >I am trying to pass an array reference to $sth->execute and I am
> > > > >getting the following error:
> > > > >
> > > > >DBD::ODBC::st execute failed: called with 38 bind variables when
> > 0
> > > > are
> > > > >needed at /usr/local/apps/common/devl/bin/GlobalRoutines.pm line
> > 42.
> > > > >
> > > > >The code I am using is as follows:
> > > > >
> > > > >  sub sub_executeBind($$$) {
> > > > >    local ($dbh, $sth, $bindVar) = @_;
> > > > >    $sth->execute(@$bindVar) || die "$dbh::errstr";
> > > > >    return($sth);
> > > > >    }
> > > > >
> > > > >Will someone please help me understand this error message?
> > > > >
> > > > >Thanks in advance.
> > > > >
> > > > >Peter
> > > > >
> > > > >Peter Loo
> > > > >Worldwide Consulting, Inc.
> > > > >Phoenix, Arizona
> > > > >U.S.A.
> > > > >
> > > > >
> > > > >
> > > > >
> > > > >
> > > > This would suggest there are no parameters in the SQL (i.e. no ?
> > as
> > > > in "insert into table values (?)").
> > > >
> > > > What does $dbh->{Statement}return - it should be the SQL you
> > > > are executuing.
> > > >
> > > > Martin
> > > >
> > > >
> > > >
> > >
> > >
> > > Peter Loo
> > > Worldwide Consulting, Inc.
> > > Phoenix, Arizona
> > > U.S.A.
> > >
> >
> >
> >
> > --
> >
>
> --------------------------------------------------------------------------------------------------------------
> > The darkest places in hell are reserved for those who maintain their
> > neutrality in times of moral crisis.
> >     Dante Alighieri (1265 - 1321)
> >
> > They who would give up an essential liberty for temporary security,
> > deserve
> > neither liberty or security.
> > Benjamin Franklin
> >
>
> --------------------------------------------------------------------------------------------------------------
> >
>
>
> Peter Loo
> Worldwide Consulting, Inc.
> Phoenix, Arizona
> U.S.A.
>



--
--------------------------------------------------------------------------------------------------------------
The darkest places in hell are reserved for those who maintain their
neutrality in times of moral crisis.
    Dante Alighieri (1265 - 1321)

They who would give up an essential liberty for temporary security, deserve
neither liberty or security.
Benjamin Franklin
--------------------------------------------------------------------------------------------------------------

Reply via email to