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()。
感谢您的回答。这适用于DBI。但由于项目限制,我不能使用DBI。我正在寻找CTLib解决方案。 – Mohit 2012-04-18 14:13:43
@MohitJain - 查看我的更新回答 – 2012-04-18 14:26:53
刚刚尝试过。但是这些方法不适用于nsql。它们与ct_execute和ct_results一起工作良好。 – Mohit 2012-04-18 14:47:46