Teradata using DBD::ODBC

"Yang, Longjiang" <[email protected]>
Newsgroups gmane.comp.lang.perl.modules.dbi.general
Message-ID <25C7997FA9D6AE4094463C55B5311CDF030DEC1B@rsp76mail.na.bestbuy.com>
Hi,

 

I use DBD::ODBC to connect to Teradata. I need to get column data type
back. when using $sth->{TYPE}. I got IDs not in $dbh->type_info_all. It
appears to happen to only CHAR and VARCHAR types. Does anyone know how
to get the data type information for a column (in a query)? Thanks.

 

Here is the code. Note that -8 in $sth->{TYPE} is not defined in
$dbh->type_info_all. It is the ID for both CHAR and VARCHAR columns
defined in the table. I tried the same using DBD::ADO and got similar
issue. 

 

#!perl

#

use strict;

use DBI;

use DBD::ODBC;

#use Carp;

use Data::Dumper;

 

my $dsn = 'Production Teradata';

 

my $dbh = DBI->connect("DBI:ODBC:$dsn", 'user', 'passwd', {AutoCommit
=> 0,PrintError  => 0,RaiseError => 0,} ) or die $DBI::errstr;

 

#CREATE SET TABLE foo 

#    (

#      fooID INTEGER,

#      LineNum INTEGER,

#               foo       char(10),

#               foo2  date,

#               foo3  smallint,

#               foo4  bigint,

#               foo5  byte,

#               foo6  time,

#      Haiku VARCHAR(50) CHARACTER SET LATIN NOT CASESPECIFIC,

#      RecModTS TIMESTAMP(0))

#PRIMARY INDEX ( fooID );

 

my $sql = 'select * from foo';

 

#$dbh->{ado_ti_ver} = 1;

my $sth = $dbh->prepare($sql)                 or die $dbh->errstr;

my $rv = $sth->execute()             or die $sth->errstr;

my $rows = $sth->fetchall_arrayref();

 

print Dumper($dbh->type_info_all), Dumper($sth->{TYPE}); 

 

$dbh->commit;

$dbh->disconnect();

 

1;

 

 

$VAR1 = [

          { 'UNSIGNED_ATTRIBUTE' => 9, 'MAXIMUM_SCALE' => 14,
'INTERVAL_PRECISION' => 18, 'CREATE_PARAMS' => 5, 'NUM_PREC_RADIX' =>
17, 'SEARCHABLE' => 8, 'LOCAL_TYPE_NAME' => 12, 'LITERAL_PREFIX' => 3,
'COLUMN_SIZE' => 2, 'MINIMUM_SCALE' => 13, 'TYPE_NAME' => 0,
'AUTO_UNIQUE_VALUE' => 11, 'NULLABLE' => 6, 'DATA_TYPE' => 1,
'SQL_DATA_TYPE' => 15, 'CASE_SENSITIVE' => 7, 'LITERAL_SUFFIX' => 4,
'FIXED_PREC_SCALE' => 10, 'SQL_DATETIME_SUB' => 16 },

          [ 'PERIOD(DATE)', '-1049', '28', 'PERIOD \'', '\'', undef,
'1', '0', '2', undef, '0', '0', 'PERIOD(DATE)', '0', '0', '-1049',
undef, '0', undef ],

          [ 'PERIOD(TIME())', '-1048', '38', 'PERIOD \'', '\'', 'scale',
'1', '0', '2', undef, '0', '0', 'PERIOD(TIME())', '0', '6', '-1048',
undef, '0', undef ],

          [ 'PERIOD(TIME() WITH TIME ZONE)', '-1047', '50', 'PERIOD \'',
'\'', 'scale', '1', '0', '2', undef, '0', '0', 'PERIOD(TIME() WITH TIME
ZONE)', '0', '6', '-1047', undef, '0', undef ],

          [ 'PERIOD(TIMESTAMP())', '-1046', '60', 'PERIOD \'', '\'',
'scale', '1', '0', '2', undef, '0', '0', 'PERIOD(TIMESTAMP())', '0',
'6', '-1046', undef, '0', undef ],

          [ 'PERIOD(TIMESTAMP() WITH TIME ZONE)', '-1045', '72', 'PERIOD
\'', '\'', 'scale', '1', '0', '2', undef, '0', '0', 'PERIOD(TIMESTAMP()
WITH TIME ZONE)', '0', '6', '-1045', undef, '0', undef ],

          [ 'BYTEINT', '-6', '3', undef, undef, undef, '1', '0', '2',
'0', '0', '0', 'BYTEINT', '0', '0', '-6', undef, '10', undef ],

          [ 'BIGINT', '-5', '19', undef, undef, undef, '1', '0', '2',
'0', '0', '0', 'BIGINT', '0', '0', '-5', undef, '10', undef ],

          [ 'VARBYTE', '-3', '64000', '\'', '\'XB', 'max length', '1',
'0', '0', undef, '0', '0', 'VARBYTE', undef, undef, '-3', undef, '0',
undef ],

          [ 'BYTE', '-2', '64000', '\'', '\'XB', 'max length', '1', '0',
'0', undef, '0', '0', 'BYTE', undef, undef, '-2', undef, '0', undef ],

          [ 'CHAR', '1', '64000', '\'', '\'', 'max length', '1', '1',
'3', undef, '0', '0', 'CHAR', undef, undef, '1', undef, '0', undef ],

          [ 'DECIMAL', '3', '38', undef, undef, 'precision, scale', '1',
'0', '2', '0', '0', '0', 'DECIMAL', '0', '38', '3', undef, '10', undef
],

          [ 'INTEGER', '4', '10', undef, undef, undef, '1', '0', '2',
'0', '0', '0', 'INTEGER', '0', '0', '4', undef, '10', undef ],

          [ 'SMALLINT', '5', '5', undef, undef, undef, '1', '0', '2',
'0', '0', '0', 'SMALLINT', '0', '0', '5', undef, '10', undef ],

          [ 'FLOAT', '6', '15', undef, undef, undef, '1', '0', '2', '0',
'0', '0', 'FLOAT', undef, undef, '6', undef, '2', undef ],

          [ 'VARCHAR', '12', '64000', '\'', '\'', 'max length', '1',
'1', '3', undef, '0', '0', 'VARCHAR', undef, undef, '12', undef, '0',
undef ],

          [ 'DATE', '91', '10', undef, undef, undef, '1', '0', '2',
undef, '0', '0', 'DATE', '0', '0', '9', '1', '0', undef ],

          [ 'TIME', '92', '8', undef, undef, undef, '1', '0', '2',
undef, '0', '0', 'TIME', '0', '0', '9', '2', '0', undef ],

          [ 'TIMESTAMP', '93', '26', 'TIMESTAMP \'', '\'', 'scale', '1',
'0', '2', undef, '0', '0', 'TIMESTAMP', '0', '6', '9', '3', '0', undef
],

          [ 'INTERVAL YEAR', '101', '4', 'INTERVAL \'', '\' YEAR',
'precision', '1', '0', '2', undef, '0', '0', 'INTERVAL YEAR', undef,
undef, '10', '1', '0', '2' ],

          [ 'INTERVAL MONTH', '102', '4', 'INTERVAL \'', '\' MONTH',
'precision', '1', '0', '2', undef, '0', '0', 'INTERVAL MONTH', undef,
undef, '10', '2', '0', '2' ],

          [ 'INTERVAL DAY', '103', '4', 'INTERVAL \'', '\' DAY',
'precision', '1', '0', '2', undef, '0', '0', 'INTERVAL DAY', undef,
undef, '10', '3', '0', '2' ],

          [ 'INTERVAL HOUR', '104', '4', 'INTERVAL \'', '\' HOUR',
'precision', '1', '0', '2', undef, '0', '0', 'INTERVAL HOUR', undef,
undef, '10', '4', '0', '2' ],

          [ 'INTERVAL MINUTE', '105', '4', 'INTERVAL \'', '\' MINUTE',
'precision', '1', '0', '2', undef, '0', '0', 'INTERVAL MINUTE', undef,
undef, '10', '5', '0', '2' ],

          [ 'INTERVAL SECOND', '106', '11', 'INTERVAL \'', '\' SECOND',
'precision, scale', '1', '0', '2', undef, '0', '0', 'INTERVAL SECOND',
'0', '6', '10', '6', '0', '2' ],

          [ 'INTERVAL YEAR TO MONTH', '107', '7', 'INTERVAL \'', '\'
YEAR TO MONTH', 'precision', '1', '0', '2', undef, '0', '0', 'INTERVAL
YEAR TO MONTH', undef, undef, '10', '7', '0', '2' ],

          [ 'INTERVAL DAY TO HOUR', '108', '7', 'INTERVAL \'', '\' DAY
TO HOUR', 'precision', '1', '0', '2', undef, '0', '0', 'INTERVAL DAY TO
HOUR', undef, undef, '10', '8', '0', '2' ],

          [ 'INTERVAL DAY TO MINUTE', '109', '10', 'INTERVAL \'', '\'
DAY TO MINUTE', 'precision', '1', '0', '2', undef, '0', '0', 'INTERVAL
DAY TO MINUTE', undef, undef, '10', '9', '0', '2' ],

          [ 'INTERVAL DAY TO SECOND', '110', '20', 'INTERVAL \'', '\'
DAY TO SECOND', 'precision', '1', '0', '2', undef, '0', '0', 'INTERVAL
DAY TO SECOND', '0', '6', '10', '10', '0', '2' ],

          [ 'INTERVAL HOUR TO MINUTE', '111', '7', 'INTERVAL \'', '\'
HOUR TO MINUTE', 'precision', '1', '0', '2', undef, '0', '0', 'INTERVAL
HOUR TO MINUTE', undef, undef, '10', '11', '0', '2' ],

          [ 'INTERVAL HOUR TO SECOND', '112', '17', 'INTERVAL \'', '\'
HOUR TO SECOND', 'precision', '1', '0', '2', undef, '0', '0', 'INTERVAL
HOUR TO SECOND', '0', '6', '10', '12', '0', '2' ],

          [ 'INTERVAL MINUTE TO SECOND', '113', '14', 'INTERVAL \'', '\'
MINUTE TO SECOND', 'precision', '1', '0', '2', undef, '0', '0',
'INTERVAL MINUTE TO SECOND', '0', '6', '10', '13', '0', '2' ]

        ];

$VAR1 = [ 4, 4, -8, 91, 5, -5, -2, 92, -8, 93 ]

 

LJ
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.