http://qs321.pair.com?node_id=839542


in reply to Re: DBD::ODBC not support
in thread DBD::ODBC not support

Hi iskegami i had made the changes wat you have told

but its giving error like this

Revision : 1 Wed May 12 12:32:13 2010 DBD::ODBC::st execute failed: MicrosoftODBC SQL Server DriverInvalid character value for cast specification (SQL-22018) at D:\Bheema\kc_tlog_loaderSQL.pl line 997.

Thanks

Replies are listed 'Best First'.
Re^3: DBD::ODBC not support
by ikegami (Patriarch) on May 12, 2010 at 13:53 UTC
    I haven't done much SQL, and I haven't dealt with passing dates. Perhaps you need to specify the type of the argument.
    use DBI qw( :sql_types ); my $sth = $dbh->prepare(' ... '); $sth->bind_param(1, $_[1]); $sth->bind_param(2, $hdr_tran_seq_nbr); $sth->bind_param(3, $loader_start_time, SQL_DATETIME); $sth->bind_param(4, $loader_start_time, SQL_DATETIME); $sth->bind_param(5, $loader_start_time, SQL_DATETIME); $sth->bind_param(6, $master_job_no); $sth->bind_param(7, $_[0]); $sth->execute();

      The best way to pass datetimes to SQLServer via ODBC is using the ODBC syntax:

      $sth->bind_param($param_n, q/{ts '1998-05-11 00:00:00'}/);

      In your case you have an additional problem since the datetime parameters occur in a function so some MS SQL Server versions will be unable to describe the parameter correctly. As a result, if the parameter occurs in a function you might have to do the following to be sure it works:

      $sth->bind_param($param_n, q/{ts '1998-05-11 00:00:00'}/, SQL_VARCHAR) +;

      See ODBC Datetime Format.

      I could go in to why using SQL_DATETIME is not a good idea but it would be rather lengthy. Perhaps I should write a FAQ on this for DBD::ODBC.

Re^3: DBD::ODBC not support
by mje (Curate) on May 12, 2010 at 10:09 UTC

    Can we see the SQL you are running now, the way you've bound the parameters and the values of the parameters?