1

我正在将与 Sybase 交互的 Perl 脚本从 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,则有一种方法可以获取列名。它们的哈希键是列名。但我只想通过 ARRAY 调用来获取字段名称。

4

2 回答 2

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

于 2012-04-18T13:49:17.557 回答
0

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

于 2013-10-12T14:37:33.120 回答