DBD::RDB version 1.20
Transactions Yes Locking Yes, implicit and explicit Table joins Yes, inner and outer LONG/LOB datatypes Yes, as cursor Statement handle attributes available After prepare() Placeholders Yes, "?" Stored Procedures Yes Bind output values Yes Table name letter case Uppercase Field name letter case Uppercase Quoting of otherwise invalid names Yes, via double quotes Case-insensitive "LIKE" operator No Server table RWO ID pseudocolumn Yes Positioned update/delete Yes Concurrent use of mutliple handles Yes
The driver author is Andreas Stiller. He can be contacted at andreas.stiller at eds dot com
The DBD::RDB modules supports Orcale RDB for OpenVMS, versions 6.x (untested), 7.0.x and 7.1 (tested). A RDB development installation and license is needed to build the module.
use DBI; $dbh = DBI->connect("dbi:RDB:ATTACH FILENAME <rootfile>" ); # The $user and $passwd parameters of the standard connect are unused. # They should be included instead in the ATTACH if needed for a remote # connection
The connect use the syntax of the CONNECT TO statement. The example above connects to a database with the rootfile <rootfile> and use the standard RDB alias. If inside SQL a connect works with
SQL> CONNECT TO 'connect-string';
then the next command should also work:
$dbh = DBI->connect("dbi:RDB:connect-string");
An example with a second alias inside the same connection is
$dbh = DBI->connect("dbi:RDB:ATTACH FILENAME <rootfile-1>, ATTACH ALIAS A FILENAME <rootfile-2>" );
Multiple connects (i.e. multiple $dbh's) are supported using the SET CONNECT inside the DBD.
SET CONNECT
DBD::RDB supports these numeric datatypes
TINYINT - signed 8-bit integer SMALLINT - signed 16-bit integer INTEGER - signed 32-bit integer BIGINT - signed 64-bit integer - all four can have PRECISION FLOAT - native C 'double' REAL - native C 'float' DOUBLE PRECISION - Synonym for FLOAT - using PRECISION switch between float and double
The corresponding IV and NV representation is used. BIGINTs are represented as strings. The conversion between NV and float and vice versa signals floating overflow and underflow in case.
DBD::RDB supports the following string datatypes
VARCHAR(size) CHAR(size) CHAR
CHAR and VARCHAR have a limit of 65,271 octets. CHAR is fixed-length and blank-padded. NCHAR, NATIONAL CHR, etc. are not tested.
RDB stores all date/time columns in 64-Bit VMS format. That means that the driver does not see the choosen SQL datatype. From this internal format the date/time is converted to string format using a given format. The format is specified as a database handle attribute.
$dbh->{rdb_dateformat} = '|!DB-!MAAU-!Y4|!H04:!M0:!S0.!C2|'
This is the VMS standard date format. Normally the attribute is used in the connect statement. Every format the LIBRTL routines can take is allowed. The default used in the connect is '|!Y4!MN0!D0|!H04!M0!S0!C2|'. This format is used for the conversion from RDB to Perl The other direction use the following list after checking the current output format.
!DB-!MAAU-!Y4|!H04:!M0:!S0.!C2 1-DEC-2000 23:12:10.99 !DB.!MAAU.!Y4|!H04:!M0:!S0.!C2 1.DEC.2000 23:12:10.99 !D0.!MN0.!Y4|!H04:!M0:!S0.!C2 01.12.2000 23:12:10.99 !D0.!MN0.!Y2|!H04:!M0:!S0.!C2 01.12.00 23:12:10.99 !D0-!MN0-!Y4|!H04:!M0:!S0.!C2 01-12-2000 23:12:10.99 !D0-!MN0-!Y2|!H04:!M0:!S0.!C2 01-12-00 23:12:10.99 !Y4.!MN0.!D0|!H04:!M0:!S0.!C2 2000.12.01 23:12:10.99 !Y4!MN0!D0|!H04!M0!S0!C7 20001201 2312109912345 !Y4!MN0!D0|!H04:!M0:!S0.!C7 20001201 23:12:10.9912345
The current value of SYS$LANGUAGE influence the meaning of MAAU (name of month) as in the corresponding LIBRTL routines.
Date Intervals are supported in all flavours. The format cannot be changed like for the date types.
Parameter binding is supported either in standard ? style or using named parameters. Named parameters can be used only with bind_param_inout. If the first parameter is not an integer then it is taken as parameter name (string) and compared against the parameter names used in the SQL statement. These are either the column names or whatever was suggested with SELECT xx AS yy.
Stored procedures are supported. The use of bind_param_input together with named parameter markers is recommended. An example is
$dbh->do( "CREATE MODULE test_module_2 LANGUAGE SQL " . "PROCEDURE proc_b( OUT :a integer, INOUT :b integer, " . " IN :c char(5), INOUT :parD char(10) ); " . " BEGIN " . " SET :b = :b + 10; " . " SET :a = :b + 123; " . " SET :parD = :c || :parD; " . " END; " . "END MODULE" ); $st_call = $dbh->prepare( "CALL proc_b( ?, ?, ?, ?)" ); $st_call->bind_param_inout( "A", \$a, 0 ); $st_call->bind_param_inout( "B", \$b, 0 ); $st_call->bind_param_inout( "C", \$c, 0 ); $st_call->bind_param_inout( "PARD", \$d, 0 ); $b = 32; $c = 'abcde'; $d = 'fghij'; $st_call->execute; die unless $a == 165; die unless $b == 42; die unless $d eq "abcdefghij";
The segmented string data type is not supported.
The first is the date/time format handling (see above). The second is the possibility to open a CURSOR WITH HOLD. This option keeps the cursor open even after a commit. This option is applied during a prepare like
$st = $dbh->prepare( "select column1 from table where " . " column2 > 10", { rdb_hold => 1 } );
Examples can be found the test.pl file which tries to test all the described features...
DBD::RDB by Andreas Stiller. DBI by Tim Bunce.
The DBD::RDB module is Copyright (c) 2000 Andreas Stiller. Germany. The DBD::RDB module is free software; you can redistribute it and/or modify it under the same terms as Perl itself with the exception that it cannot be placed on a CD-ROM or similar media for commercial distribution without the prior approval of the author.
To install DBD::RDB, copy and paste the appropriate command in to your terminal.
cpanm
cpanm DBD::RDB
CPAN shell
perl -MCPAN -e shell install DBD::RDB
For more information on module installation, please visit the detailed CPAN module installation guide.