DBD::ODBC

DBD::ODBC Perl module contains a ODBC Driver for DBI.
Download

DBD::ODBC Ranking & Summary

Advertisement

  • Rating:
  • License:
  • Perl Artistic License
  • Price:
  • FREE
  • Publisher Name:
  • DBD::ODBC team
  • Publisher web site:
  • http://search.cpan.org/~mjevans/DBD-ODBC-1.14/ODBC.pm

DBD::ODBC Tags


DBD::ODBC Description

DBD::ODBC Perl module contains a ODBC Driver for DBI. DBD::ODBC Perl module contains a ODBC Driver for DBI.SYNOPSIS use DBI; $dbh = DBI->connect('dbi:ODBC:DSN', 'user', 'password');Private DBD::ODBC Attributes odbc_more_results (applies to statement handle only!)Use this attribute to determine if there are more result sets available. SQL Server supports this feature. Use this as follows:do { my @row; while (@row = $sth->fetchrow_array()) { # do stuff here } } while ($sth->{odbc_more_results});Note that with multiple result sets and output parameters (i.e. using bind_param_inout, don't expect output parameters to be bound until ALL result sets have been retrieved.odbc_ignore_named_placeholdersUse this if you have special needs (such as Oracle triggers, etc) where :new or :name mean something special and are not just place holder names You must then use ? for binding parameters. Example: $dbh->{odbc_ignore_named_placeholders} = 1; $dbh->do("create trigger foo as if :new.x :old.x then ... etc");Without this, DBD::ODBC will think :new and :old are placeholders for binding and get confused.odbc_default_bind_typeThis value defaults to 0. Older versions of DBD::ODBC assumed that the binding type was 12 (SQL_VARCHAR). Newer versions default to 0, which means that DBD::ODBC will attempt to query the driver via SQLDescribeParam to determine the correct type. If the driver doesn't support SQLDescribeParam, then DBD::ODBC falls back to using SQL_VARCHAR as the default, unless overridden by bind_param()odbc_force_rebindThis is to handle special cases, especially when using multiple result sets. Set this before execute to "force" DBD::ODBC to re-obtain the result set's number of columns and column types for each execute. Especially useful for calling stored procedures which may return different result sets each execute. The only performance penalty is during execute(), but I didn't want to incur that penalty for all circumstances. It is probably fairly rare that this occurs. This attribute will be automatically set when multiple result sets are triggered. Most people shouldn't have to worry about this.odbc_async_execAllow asynchronous execution of queries. Right now, this causes a spin-loop (with a small "sleep") until the SQL is complete. This is useful, however, if you want the error handling and asynchronous messages (see the err_handler) below. See t/20SQLServer.t for an example of this.odbc_exec_directForce DBD::ODBC to use SQLExecDirect instead of SQLPrepare() then SQLExecute. There are drivers that only support SQLExecDirect and the DBD::ODBC do() override doesn't allow returning result sets. Therefore, the way to do this now is to set the attributed odbc_exec_direct. There are currently two ways to get this: $dbh->prepare($sql, { odbc_exec_direct => 1}); and $dbh->{odbc_exec_direct} = 1; When $dbh->prepare() is called with the attribute "ExecDirect" set to a non-zero value dbd_st_prepare do NOT call SQLPrepare, but set the sth flag odbc_exec_direct to 1.odbc_err_handlerAllow errors to be handled by the application. A call-back function supplied by the application to handle or ignore messages. If the error handler returns 0, the error is ignored, otherwise the error is passed through the normal DBI error handling structure(s).This can also be used for procedures under MS SQL Server (Sybase too, probably) to obtain messages from system procedures such as DBCC. Check t/20SQLServer.t and mytest/testerrhandler.plThe callback function takes three parameters: the SQLState, the ErrorMessage and the native server error.odbc_SQL_ROWSET_SIZEHere is the information from the original patch, however, I've learned since from other sources that this could/has caused SQL Server to "lock up". Please use at your own risk!SQL_ROWSET_SIZE attribute patch from Andrew Brown > There are only 2 additional lines allowing for the setting of > SQL_ROWSET_SIZE as db handle option. > > The purpose to my madness is simple. SqlServer (7 anyway) by default > supports only one select statement at once (using std ODBC cursors). > According to the SqlServer documentation you can alter the default setting > of > three values to force the use of server cursors - in which case multiple > selects are possible. > > The code change allows for: > $dbh->{SQL_ROWSET_SIZE} = 2; # Any value > 1 > > For this very purpose. > > The setting of SQL_ROWSET_SIZE only affects the extended fetch command as > far as I can work out and thus setting this option shouldn't affect > DBD::ODBC operations directly in any way. > > Andrew >SQL_DRIVER_ODBC_VERThis, while available via get_info() is captured here. I may get rid of this as I only used it for debugging purposes.odbc_cursortype (applies to connect only!)This allows multiple concurrent statements on SQL*Server. In your connect, add { odbc_cursortype => 2 }. If you are using DBI > 1.41, you should also be able to use { odbc_cursortype => DBI::SQL_CURSOR_DYNAMIC } instead. For example: my $dbh = DBI->connect("dbi:ODBC:$DSN", $user, $pass, { RaiseError => 1, odbc_cursortype => 2}); my $sth = $dbh->prepare("one statement"); my $sth2 = $dbh->prepare("two statement"); $sth->execute; my @row; while (@row = $sth->fetchrow_array) { $sth2->execute($row); }See t/20SqlServer.t for an example.odbc_query_timeoutThis allows the end user to set a timeout for queries on the ODBC side. After your connect, add { odbc_query_timeout => 30 } or set on the dbh before executing the statement. The default is 0, no timeout. Note that some drivers may not support this attribute.See t/20SqlServer.t for an example.odbc_has_unicode (applies to database handle only)A read-only attribute signifying whether DBD::ODBC was built with the C macro WITH_UNICODE or not. A value of 1 indicates DBD::ODBC was built with WITH_UNICODE else the value returned is 0.Building WITH_UNICODE affects columns and parameters which are SQL_C_WCHAR, SQL_WCHAR, SQL_WVARCHAR, and SQL_WLONGVARCHAR.When odbc_has_unicode is 1, DBD::ODBC will:bind columns the database declares as wide characters as SQL_WxxxThis means that UNICODE data stored in these columns will be returned to Perl in UTF-8 and with the UTF8 flag set.bind parameters the database declares as wide characters as SQL_WxxxParameters bound where the database declares the parameter as being a wide character (or where the parameter type is explicitly set to a wide type - SQL_Wxxx) can be UTF8 in Perl and will be mapped to UTF16 before passing to the driver.NOTE: You will need at least Perl 5.8.1 to use UNICODE with DBD::ODBC.NOTE: At this time SQL statements are still treated as native encoding i.e. DBD::ODBC does not call SQLPrepareW with UNICODE strings. If you need a unicode constant in an SQL statement, you have to pass it as parameter or use SQL functions to convert your constant from native encoding to Unicode.NOTE: Binding of unicode output parameters is coded but untested.NOTE: When building DBD::ODBC on Windows ($^O eq 'MSWin32) the WITH_UNICODE macro is automatically added. To disable specify -nou as an argument to Makefile.PL (e.g. nmake Makefile.PL -nou). On non-Windows platforms the WITH_UNICODE macro is not enabled by default and to enable you need to specify the -u argument to Makefile.PL. Please bare in mind that some ODBC drivers do not support SQL_Wxxx columns or parameters.UNICODE support in ODBC Drivers differs considerably. Please read the README.unicode file for further details.odbc_version (applies to connect only!)This was added prior to the move to ODBC 3.x to allow the caller to "force" ODBC 3.0 compatibility. It's probably not as useful now, but it allowed get_info and get_type_info to return correct/updated information that ODBC 2.x didn't permit/provide. Since DBD::ODBC is now 3.x, this can be used to force 2.x behavior via something like: my $dbh = DBI->connect("dbi:ODBC:$DSN", $user, $pass, { odbc_version => 2}); Requirements: · Perl


DBD::ODBC Related Software