Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 12.0.1 (Deutsch) » SQL Anywhere Server - Programmierung » Perl/DBI-Unterstützung » Perl-Skripten, die DBD::SQLAnywhere verwenden

 

Wie mehrere Ergebnismengen verarbeitet werden

Die Methode zur Behandlung von mehreren Ergebnismengen aus einer Abfrage umfasst das Einbetten der Abrufschleife in einer anderen Schleife, der sich zwischen Ergebnismengen bewegt.

SQL-Anweisungen, die mehrere Ergebnismengen zurückgeben, müssen vor ihrer Ausführung vorbereitet werden. Die prepare-Methode gibt ein Handle für diese Anweisung zurück. Mit diesem Handle führen Sie die Anweisung aus. Anschließend rufen Sie die Metadaten der Ergebnismenge und die Zeilen der einzelnen Ergebnismenge ab.



#!/usr/local/bin/perl -w
#
use DBI;
use strict;
my $database = "demo";
my $data_src = "DBI:SQLAnywhere:SERVER=$database;DBN=$database";
my $uid      = "DBA";
my $pwd      = "sql";
my $sel_stmt = "SELECT ID, GivenName, Surname
                  FROM Customers
                  ORDER BY GivenName, Surname;
                SELECT * 
                  FROM Departments 
                  ORDER BY DepartmentID"; 
my %defaults = (
     AutoCommit => 0, # Require explicit commit or rollback.
     PrintError => 0
   );
my $dbh = DBI->connect($data_src, $uid, $pwd, \%defaults)
  or die "Cannot connect to $data_src: $DBI::errstr\n";
&db_query($sel_stmt, $dbh);
$dbh->rollback;
$dbh->disconnect;
exit(0);

sub db_query {
      my($sel, $dbh) = @_;
      my($row, $sth) = undef;
      $sth = $dbh->prepare($sel);
      $sth->execute;
      do {
          print "Fields:     $sth->{NUM_OF_FIELDS}\n";
          print "Params:     $sth->{NUM_OF_PARAMS}\n\n";
          print join("\t\t", @{$sth->{NAME}}), "\n\n";
          while($row = $sth->fetchrow_arrayref) {
             print join("\t\t", @$row), "\n";
          }
          print "---end of results---\n\n";
      } while (defined $sth->more_results);
      $sth = undef;
}
__END__