nsql查询后Sybase :: CTLib(Perl)中的列(字段)名称

nsql查询后Sybase :: CTLib(Perl)中的列(字段)名称

问题描述:

我正在将与Sybase交互的Perl脚本从DBLIB DB接口迁移到CTLIB。 DBLIB和CTLIB都支持nsql方法。通过使用nsqlnsql查询后Sybase :: CTLib(Perl)中的列(字段)名称

$qry = 'Select * from A'; 
@data = $dbh->nsql($qry,{}); 
$string = $dbh->dbcolname($colid) 

我怎么能在CTLIB得到列名 -

在DBLIB我可以使用nsql得到列名这样的吗?

$qry = 'Select * from A'; 
@data = $dbh->nsql($qry,"ARRAY"); 
#Replacement of dbcolname? 

有一种方法来获取列名,如果我从nsql请求散列而不是ARRAY。他们的哈希键是列名。但是我只想用ARRAY调用来获取字段名称。

在CTlib中没有原生的方法。唯一的解决办法是重写你自己的版本的NSQL。它可以从CTLib的源头分支出来。

对于DBI是:

$sth = $dbh->prepare($query) or die "Prepare exception: $DBI::errstr"; 
$rv = $sth->execute() or die "Execute exception: $DBI::errstr"; 
$res = $sth->fetchall_arrayref();      

# Array reference with cols captions, which were retrived 
$names = $sth->{NAME};   

# Array reference with types of cols, which were retrived   
$types = $sth->{TYPE};        
$sth->finish(); 

对于的Sybase :: CTLIB试>>

@names = $dbh->ct_col_names

检索当前查询的列名。如果当前查询不是select语句,则返回一个空数组。

@types = $dbh->ct_col_types([$doAssoc])

检索列类型当前正在执行的查询。如果$ doAssoc不为0,则返回一个散列(又名关联数组),其列名称/列类型对。


@dat = $dbh->dbnextrow([$doAssoc [, $wantRef]])

检索一行。 dbnextrow()返回一个标量数组,每个列值一个。如果$ doAssoc不为0,则dbnextrow()会返回一个散列(又名关联数组),其中列名称为 /值对。这减轻了程序员不必调用dbbind()或dbdata()。

+0

感谢您的回答。这适用于DBI。但由于项目限制,我不能使用DBI。我正在寻找CTLib解决方案。 – Mohit 2012-04-18 14:13:43

+0

@MohitJain - 查看我的更新回答 – 2012-04-18 14:26:53

+0

刚刚尝试过。但是这些方法不适用于nsql。它们与ct_execute和ct_results一起工作良好。 – Mohit 2012-04-18 14:47:46