我正在迁移一个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电话获取字段名称。
答案 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的源代码分叉。