Какой простой способ прочитать таблицу сервера SQL в хэш в Perl? - PullRequest
1 голос
/ 15 декабря 2009

Мне бы хотелось, чтобы простой скрипт / сабл perl для чтения таблицы сервера sql в хеш, есть ли у кого-нибудь хороший скрипт или фрагмент (с 'use's), которые могут сделать это, учитывая строку подключения и имя таблицы?

Вот шаблон:

sub sqltable {    
    my ($connStr,$table) = @_;    
    my ($user, $password, $host) = ($connectstr =~ m|^(.*)/(.*)@(.*)$|); # or whatever    
    my $dbh = DBI->connect("dbi:???:$host",$user,$password, { RaiseError => 1 }); # replace ??? with good SQL Server equivalent
    $dbh-> ???; # anything good for this part?  LongTruncOk?  LongReadLen?    
    return $dbh->selectall_arrayref("select * from $table");    
}

Ответы [ 4 ]

9 голосов
/ 15 декабря 2009

См. selectall_hashref на странице Perl DBI.

5 голосов
/ 15 декабря 2009

Что касается подключения к SQL Server с использованием Perl,

2 голосов
/ 15 декабря 2009

Вы точно описываете Tie :: DBI . Средство tie в Perl позволяет собственным структурам данных (таким как массивы и хэши) представлять данные, которые поступают от других механизмов, таких как базы данных и файлы.

Тем не менее, вы можете много читать по общей теме доступа к базам данных и управления ими в Perl. Доступно много полноценных ORM, таких как Rose :: DB :: Object , а также более простые библиотеки, такие как DBI для подключения к БД.

1 голос
/ 16 декабря 2009

Я думаю, что это решение, которое вы ищете.

sub get_db {
  my ($server,$database,$tbl,$username,$password) = @_;
  my $dbh = DBI->connect("dbi:ODBC:DRIVER={SQL Server};SERVER=$server;DATABASE=$database",$username,$password); 
  die "Error connecting to database: Error $DBI::err - $DBI::errstr\n" unless defined($dbh);
  my $rows = $dbh->selectall_arrayref("select * from $tbl");
  $dbh->disconnect;
  return $rows;
}
...