如何获取一个SQL查询返回的记录集中的每个字段的数据类型?

如何获取一个SQL查询返回的记录集中的每个字段的数据类型?

如何获取一个SQL查询返回的记录集中的每个字段的数据类型?
如何获取一个SQL查询返回的记录集中的每个字段的数据类型?
我用DBI执行一个查询,比如,“SELECT NICK,SHOP,CREATEDATE,ID FROM SHOPS",我如何知道返回的记录集中NICK,SHOP的数据类型是字符串,还是整数?还是DATATIME等
select本身无法...
select本身无法查到。你需要用其他语法去查。
有一个方法返回...
有一个方法返回一个数组记录字段数据类型的.
你看看手册.
没找到呀...
我用mysql的时候用的是
$sth->{mysql_type_name}
你看看其它DBD的有没有.
用语句句柄的TYPE属性
可以用语句句柄的TYPE属性。
如:
$sth->{TYPE}->[2]
因为$sth->{TYPE}返回的是一个字段类型的数组,如你的语句是select name,age,birthday from students,那么
$sth->{TYPE}->[0]就是12(代表VARCHAR),$sth->{TYPE}->[1]是2(代表NUMERIC),
$sth->{TYPE}->[2]是9(代表SQL_DATE)
具体返回值与其所代表的字段类型的对应表,你可以用下面的代码把类型与值的对应表打出来:
use DBI;

foreach (@{ $DBI::EXPORT_TAGS{sql_types} }) {
printf "%s=%d\n", $_, &{"DBI::$_"};
}

另外,在activeperl的document里DBI部份有其它的方法来一下子获取schema,table和column信息,正
所谓TMTOWTDI(There's More Than One Way To Do It--条条大路通罗马:))
数据类型获取到...
数据类型获取到了,不过,字段定义的长度,名字,从哪个属性获取到?
我想根据查询生成某种语言的代码!

#!d:/perl/bin/perl.exe
use strict;
use DBI;
use Data::Dump qw(dump);

my $dbname="";
my $user="";
my $passwd="";

my $dbh = DBI->connect("dbi:Oracle:$dbname", $user, $passwd) or die("connect error!");


my %sql_type_map;
my %sql_type_inv;
foreach (@{$DBI::EXPORT_TAGS{sql_types}})
{
no strict 'refs';
$sql_type_map{$_} = &{"DBI::$_"}();
$sql_type_inv{$sql_type_map{$_}} = $_;
}

#print $sql_type_inv{12};

displayMeta();

$dbh->disconnect();


sub displayMeta()
{
my $sth = $dbh->prepare("select * from emailinfo where 1=2");
foreach(@{$sth->{TYPE}})
{
print $sql_type_inv{$_};
print "\n";
}
#print "a : " , $a[0][4] , "\n";
$sth->execute();

my $lineCount = 0;
}
各个属性如下:
$sth->{NUM_OF_FIELDS} 字段数, 是标量
$sth->{NAME} 字段名,是个数组,还有NAME_uc,NAME_lc表示用大写/小写输出
$sth->{TYPE} 字段类型,是数组,前面说过。
$sth->{PRECISION} 字段的长度,是数组,你要的。
$sth->{SCALE} 字段的小数位精度,是数组。
$sth->{NULLABLE} 字段是否允许为空,数组,其中0 => NOT NULL,1=>NULLABLE,2=>UNKNOWN
$sth->{NUM_OF_PARAMS} 参数个数。
好,谢谢...