0

テーブルから列名を取得するにはどうすればよいですか? 私の試みはうまくいきませんでした:

#!/usr/bin/env perl
use warnings;
use 5.012;
use DBI;

my $options  = { RaiseError => 1, PrintError => 0, f_ext => ".csv/r" };
my $dbh = DBI->connect( "dbi:CSV:", undef, undef, $options ) or die $DBI::errstr;

my $table = 'test';
$dbh->do( "CREATE TEMP TABLE $table ( id INT, size INT )" );
my $sth = $dbh->prepare( "INSERT INTO $table ( id, size ) VALUES( ?, ? )" );
$sth->execute( 1, 235 );
$sth->execute( 2, 42 );

use Data::Dumper;
say Dumper $dbh->{csv_tables}{$table}{col_names};

$dbh->{csv_tables}{$table} = { skip_first_row => 0 };
$sth = $dbh->prepare( "SELECT * FROM $table" );
$sth->execute;
my @first_row = $sth->fetchrow_array;
say "@first_row\n";

$sth = $dbh->column_info( '', '', $table, '' );
my $ref = $sth->fetchall_arrayref;
say "@$_" for @$ref;


# $VAR1 = undef;
#
# 1 235
#
# Can't call method "fetchall_arrayref" on an undefined value at ./so.pl line 25.
4

1 に答える 1

6

column_infoメソッドはドライバーによって実装されるはずであり、実装されていない場合は取得しますundef

代わりに$sth->{NAME}、最初のクエリを実行した後に見ていきます。

ちなみにDBD::CSVは楽しいおもちゃですが、軽量の使い捨てデータベースが必要な場合は、DBD::SQLite代わりに使用することを強くお勧めします。また、CSV データを処理する必要があるだけの場合は、生のアクセスを提供する適切なモジュールがいくつかあります。これら 2 つの間で、意味のある使用例はほとんど残っていませDBD::CSVん。

于 2011-04-25T07:10:00.830 に答える