Каков простой способ прочитать таблицу сервера sql в хэш в Perl?

Я хотел бы, чтобы простой perl-скрипт / sub считывал таблицу сервера sql в хеш, есть ли у кого-нибудь хороший скрипт или фрагмент (с «использованием»), который может сделать это с учетом строки подключения и имени таблицы?

Вот шаблон:

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");    
}

person Zartog    schedule 14.12.2009    source источник
comment
Значит ли это, что вы еще ничего не пробовали? Вам просто нужен полный исходный код?   -  person innaM    schedule 15.12.2009
comment
Полный исходный код во всех 2-3 строчках? да. selectall_hashref указывает на 2-ю или 3-ю строку. Первая пара строк создаст и подключит DBI. Я уже заставил его работать для Oracle, я надеялся, что у кого-то есть удобный эквивалент Sql Server. Могу ли я использовать прямой DBI? ДБИ:: что-то? Можно ли использовать строку подключения напрямую или ее следует разбить на части, а затем передать для подключения? На все это есть простой ответ, который кто-то уже знает, и я тоже с нетерпением жду, когда узнаю его в ближайшее время.   -  person Zartog    schedule 15.12.2009
comment
строка подключения зависит от базы данных, поэтому ее синтаксический анализ может привести только к меньшей переносимости.   -  person ysth    schedule 15.12.2009
comment
Что не совсем отвечает на вопрос «можно ли его использовать напрямую»   -  person Zartog    schedule 15.12.2009


Ответы (4)


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

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;
}
person Sheep    schedule 16.12.2009

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

person Kevin Panko    schedule 14.12.2009
comment
+1 Вау. Если бы я знал об этом раньше, то сэкономил бы мне много времени! - person Andomar; 15.12.2009
comment
Это хорошая часть, спасибо. Теперь мне просто нужна помощь в первой части - как подключиться к серверу sql с помощью строки подключения. - person Zartog; 15.12.2009

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

person Adam Bellaire    schedule 14.12.2009

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

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

person Ether    schedule 14.12.2009