wtorek, 20 marca 2018

MS SQL, Perl i DBI

Kolega L. mi zadanie zlecił, w którym wykorzystywaną bazą musi być MS SQL. Podchodziłem do tego jak do jeża, ale wreszcie się przełamałem, usiadłem i działa (aż dziwne). W skład zadania wchodzi też baza danych pn. GraphiPlus, która zawiera m.in. tabele o nazwach dbo.FACTURES oraz dbo.SOCIETES:

#!/usr/bin/perl
use strict;
use utf8;
use DBI; 
require DBD::ODBC;
my $serverN = 'E5410-KOMPUTER\\SQLEXPRESS';
my $baseN = 'GraphiPlus';
my $dsN = "GraphiPlus";
## Obie formy działają (pierwsza przez DSN = Data Source Name/Źródło danych)
## Definiowanie DSN: Panel_Sterowania→Wszystkie_Elementy→
##    Narzędzia_Administracyjne→Źródła_danych_(ODBC)
# my $dbh = DBI->connect("dbi:$dsN", '<UID>', '<PASSWD>',
#   { RaiseError => 1 } ) or die DBI->errstr;
# Albo
my $dbh = DBI->connect("dbi:ODBC:driver={SQL Server};Server=$serverN;database=$baseN;uid=<UID>;pwd=<PASSWD;",
   {RaiseError => 1, } ) or die DBI->errstr;

print "*** Połączono z $baseN ***\n";

## małe litery do.TABELA są istotne!
my $sth = $dbh->prepare("SELECT * FROM dbo.FACTURES ") || die "ERROR" . $dbh->errstr ;  
$sth ->execute();

print "**** Tabela FACTURES:\n";
while ( my @invoiceRecord = $sth->fetchrow_array() ) {
   print (join(";", @invoiceRecord) . "\n");
}

## musi być (w mySQL niekoniecznie)
$sth->finish();

print "**** Tabela SOCIETESS:\n";
my $sth = $dbh->prepare("SELECT * FROM dbo.SOCIETES ") || die "ERROR" . $dbh->errstr ;  
$sth ->execute();

while ( my @invoiceRecord = $sth->fetchrow_array() ) {
   print (join(";", @invoiceRecord) . "\n");
}

$sth->finish();

$dbh->disconnect();

###

Gdybym nie znał nazw tabel to można je ustalić albo za pomocą SQL Server Management Studio, albo wykonując polecenie SELECT na systemowej tabeli pn. sys.tables:

my $sts = $dbh->prepare("SELECT name FROM sys.tables ") || die "ERROR" . $dbh->errstr ;

Brak komentarzy:

Prześlij komentarz