1

Sybaseと対話するPerlスクリプトをDBLIBDBインターフェイスから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]])

1行を取得します。dbnextrow()は、列値ごとに1つずつ、スカラーの配列を返します。$ doAssocが0以外の場合、dbnextrow()は列名と値のペアを持つハッシュ(別名連想配列)を返します。これにより、プログラマーはdbbind()またはdbdata()を呼び出す必要がなくなります。

于 2012-04-18T13:49:17.557 に答える
0

CTlibでそれを行うネイティブな方法はありません。唯一の解決策は、独自のバージョンのNSQLを書き直すことです。CTLibのソースからフォークすることができます。

于 2013-10-12T14:37:33.120 に答える