|
Наиболее простой способ - использовать Perl и следующий набор модулей:
DBD-Sybase-0.22.tar.gz (www.cpan.org)
DBI-1_13_tar.gz (www.cpan.org)
freetds-0_50.tgz (www.freetds.org)
Если вы работаете с RedHat Linux, то, возможно, вы предпочтёте использовать RPM-модули.
Также вам понадобится компилятор C, лучше, если это будет gcc.
(SUN SPARC и Solaris Intel: gcc version 2.95.2 19991024 (release))
(Linux RedHat: gcc version egcs-2.91.66 19990314/Linux (egcs-1.1.2
release))
Также понадобится интрепретатор Perl.
perl, version 5.005_03
Данный набор был успешно установлен и функционировал (по кр. мере
в некотором минимально достаточном наборе)
на платформах:
Linux RedHat 6.1 (kernel 2.2.5-15)
SunOS 5.7 i86pc i386 i86pc
SunOS 5.7 sun4u sparc SUNW,Ultra-Enterprise
В качестве сервера базы данных использовалась машина WindowsNT и сервер MS SQL версии 7.00.623
1. Распаковать и растарить каждый из пакетов. Например:
tar zxvf DBD-Sybase-0.22.tar.gz
или
gunzip DBD-Sybase-0.22.tar.gz
tar DBD-Sybase-0.22.tar
2. Прочитать файлы README и INSTALL, который там найдете
3. Установить переменную окружения $SYBASE. Например, для sh/bash/ksh
SYBASE=/usr/local/freetds
export SYBASE
Это директория будет использоваться для установки клиентской
библиотеки freetds
4. Собрать freetds. Для работы с MSSQL 7.0.* следует использовать
следующую конструкцию
$ ./configure --with-tdsver=4.2
$ make
$ make install
Скорее всего, при компиляции вы получите сообщения о нехватке некоторых библиотек. Это не страшно, если конечно tcl не заменяет вам perl ;)
5. Исправить конфигурационный файл $SYBASE/interfaces, указав там тип соединения, IP-адрес сервера БД, порт. В приведенном примере это имя соединения ms2. Остальные строки можно оставить без изменения
==== $SYBASE/interfaces ==================== cut ====
JDBC
query tcp ether 192.138.151.39 4444
master tcp ether 192.138.151.39 4444
myserver
query tcp ether 127.0.0.1 4000
master tcp ether 127.0.0.1 4000
ms2
query tcp ether 212.42.32.164 1433
master tcp ether 212.42.32.164 1433
============================================== cut ===
6. Устанавливаем DBI-интрефейс, предварительно прочитав имеющийся в дистрибутиве README:
cd DBI_source_dir
perl Makefile.PL
make
make test
make install
7. Устанавливаем DBD-драйвер (Sybase, разумеется)
cd DBD_source_dir
perl Makefile.PL
make
make test
make install
8. Пишем тестовую программку на Perl
###################################################
#!/usr/bin/perl -w
#
use DBI;
use DBD::Sybase;
use strict;
$ENV{SYBASE}='/usr/local/freetds';
# Раскомментируйте следующую строку, если не хотите связываться
# с внешним конфигурационным файлом
#my $dsn="DBI:Sybase:server=212.42.32.164;port=1433;database=ms2";
#
my $dsn = "DBI:Sybase:server=ms2";
my $user='ttt';
my $password='trust911';
## DBI -> trace(2);
my $dbh = DBI->connect($dsn, $user, $password,
{ RaiseError => 1, AutoCommit => 0 })
or die "$DBI::errstr\n";
$dbh->{'syb_flush_finish'} = 1;
if ($dbh) { print "\nConnect OK!\n"; }
## Вызов нескольких процедур с обращением к БД
##&do_query1;
##&do_query2;
&do_query_test1;
&do_query_test3;
$dbh->disconnect;
######################
# Простой запрос к БД
##
sub do_query1 {
my $field_1;
my $field_2;
my $sql_str = "SELECT * FROM VotesBase";
my $sth = $dbh->prepare($sql_str);
my $rv = $sth->execute ||
die "Can't execute statement: $DBI::errstr";
print "Query will return $sth->{NUM_OF_FIELDS} fields.\n\n";
print "Field names: @{ $sth->{NAME} }\n";
while (($field_1, $field_2) = $sth->fetchrow_array) {
print "$field_1: $field_2\n";
}
}
sub do_query2 {
my $field_1;
my $field_2;
my $par1 = 5;
my $par2 = 0;
my $sql_str = "exec test3 $par1, \$par2 OUTPUT";
my $sth = $dbh->prepare($sql_str);
my $rv = $sth->execute ||
die "Can't execute statement: $DBI::errstr";
print "Result1: ". $par1;
print "Result2: ". $par2;
# print "\nQuery will return $sth->{NUM_OF_FIELDS} fields.\n\n";
# print "Field names: @{ $sth->{NAME} }\n";
# while (($field_1, $field_2) = $sth->fetchrow_array) {
# print "$field_1: $field_2\n";
# }
return 0;
}
sub do_query_test1 {
my $field_1;
my $field_2;
my $par1 = 8;
my $par2 = 0;
my $sql_str = "exec test1 $par1";
my $sth = $dbh->prepare($sql_str);
my $rv = $sth->execute ||
die "Can't execute statement: $DBI::errstr";
print "Result1: ". $par1;
print "\nQuery will return $sth->{NUM_OF_FIELDS} fields.\n\n";
print "Field names: @{ $sth->{NAME} }\n";
while (($field_1, $field_2) = $sth->fetchrow_array) {
print "$field_1: $field_2\n";
}
return 0;
}
sub do_query_test3 {
my $field_1;
my $field_2;
my $par1 = 8;
my $par2 = 0;
my $sql_str = "exec test3 $par1, $par2";
my $sth = $dbh->prepare($sql_str);
my $rv = $sth->execute ||
die "Can't execute statement: $DBI::errstr";
my @results = $sth->func('syb_output_params');
print "\nResults: ". @results;
return 0;
}
|