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

时间:2012-04-18 13:40:15

标签: perl sybase

我正在迁移一个Perl脚本,该脚本与Sybase从DBLIB数据库接口交互到CTLIB。 DBLIB和CTLIB都支持nsql方法。

在DBLib中,我可以使用nsql -

获取这样的列名
$qry = 'Select * from A';
@data = $dbh->nsql($qry,{});
$string = $dbh->dbcolname($colid) 

如何使用nsql?

在CTLib中获取列名
$qry = 'Select * from A';
@data = $dbh->nsql($qry,"ARRAY");
#Replacement of dbcolname? 

如果我从nsql请求哈希而不是ARRAY,有一种获取列名的方法。 Hash的键是列名。但我想仅通过ARRAY电话获取字段名称。

2 个答案:

答案 0 :(得分:0)

对于 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()。

答案 1 :(得分:0)

在CTlib中没有本地方法可以做到这一点。唯一的解决方案是重写您自己的NSQL版本。可以从CTLib的源代码分叉。