## Beispiele für das Modul SAP::DBTech::loader

Um das Perl-Skript sample.pl aufzurufen und sich am Loader als Datenbankbenutzer MONA mit dem Kennwort RED an die Datenbankinstanz DEMODB anzumelden, geben Sie folgendes Kommando auf der Kommandozeile ein:

perl sample.pl MONA RED DEMODB

### Aufbau einer Verbindung

# Verweis auf Perl-Libraries

# ----------------------------

use SAP::DBTech::loader;

# Parsen der Aufrufargumente

# --------------------------

my $user_name = $ARGV [0];

my $password = $ARGV [1];

my $database_name = $ARGV [2];

# Aufbau einer Loadersitzung; es wird noch keine

# Verbindung zur Datenbankinstanz aufgebaut

# ------------------------------------------------------

my $session = new Loader ();

# Anmelden an die Datenbankinstanz

# -------------------------------------

$session->cmd ("use user $user_name $password serverdb $database_name");

# Abmelden

# -------------------------------------

$session->release ();

#### Variante

Um zu vermeiden, dass das System Benutzername und Kennwort in Großbuchstaben umwandelt, schließen Sie Benutzername und Kennwort im Kommando use user in doppelte Anführungszeichen ein:

$session->cmd ("use user \”$user\”_name \”$password\” serverdb $database_name");

In den folgenden Beispielen wird die Anmeldung verkürzt angegeben:

my $session = new Loader ()

$session->cmd ("use user ${ARGV [0]} ${ARGV [1]} serverdb ${ARGV [2]}");

### Ausführen von Loader-Kommandos

Mit der Methode cmd können Sie sowohl Loader-Kommandos als auch SQL-Anweisungen ausführen.

use SAP::DBTech::loader;

# Aufbau einer Loadersitzung

my $session = new Loader ();

$session->cmd ("use user ${ARGV [0]} ${ARGV [1]} serverdb ${ARGV [2]}");

# Ausführen einer SQL-Anweisung

$session->cmd("

CREATE TABLE customer2

(

cno FIXED(4,0) PRIMARY KEY,

title CHAR(7),

firstname CHAR(10),

name CHAR(10) NOT NULL,

zip CHAR(5),

address CHAR(25) NOT NULL)");

# Ausführen eines DATALOAD-Kommandos

$session->cmd ("

DATALOAD TABLE customer

cno 1

title 2

firstname 3

name 4

zip 5

address 6

INFILE 'customer.dat'");

### Behandeln von Fehlersituationen

Wenn innerhalb der Methode cmd ein Fehler auftritt, dann wird ein Ausnahmeobjekt der Klasse LoaderError erzeugt. Dieses Ausnahmeobjekt können Sie innerhalb eines try-except-Kommandos erkennen und behandeln.

Die Methode sql bietet einen vereinfachten Zugriff auf Fehler innerhalb von SQL-Anweisungen. Wenn innerhalb der Methode sql ein SQL-Fehler auftritt, dann wird keine Ausnahme erzeugt, sondern die Fehlernummer an den Aufrufer zurückgegeben. Diese Fehlernummer können Sie im Programm abfragen.

use SAP::DBTech::loader;

# Aufbau einer Loadersitzung

my $session = new Loader ();

$session->cmd ("use user ${ARGV [0]} ${ARGV [1]} serverdb ${ARGV [2]}");

# Abfrage, ob eine Tabelle existiert

my $sqlrc = $session->sql ("EXISTS TABLE customer2");

# die Tabelle wird nur angelegt, wenn sie

# nicht bereits existiert

if ($sqlrc == -4004) {

$session->cmd("

CREATE TABLE customer2

(

cno FIXED(4,0) PRIMARY KEY,

title CHAR(7),

firstname CHAR(10),

name CHAR(10) NOT NULL,

zip CHAR(5),

address CHAR(25) NOT NULL)");

}

# Ausführen eines DATALOAD-Kommandos

my $filename = 'customer.dat';

eval {

$session->cmd ("

DATALOAD TABLE customer2

cno 1

title 2

firstname 3

name 4

zip 5

address 6

INFILE '$filename'");

};

# Ausgabe der Fehlermeldung

if ($@) {

print "DATALOAD der Datei $filename ist gescheitert: $@\n";

}

### Beispieldaten

Die in den Beispielen verwendete Datei customer.dat hat folgenden Inhalt:

"3000","Mrs","Jenny","Porter","10580","1340 N.Ash Street, #3"

"3100","Mr","Peter","Brown","48226","1001 34th Str., APT.3"

"3200","Company","?","Datasoft","90018","486 Maple Str."

"3300","Mrs","Rose","Brian","75243","500 Yellowstone Drive, #2"

"3400","Mrs","Mary","Griffith","20005","3401 Elder Lane"

"3500","Mr","Martin","Randolph","60615","340 MAIN STREET, #7"

"3600","Mrs","Sally","Smith","75243","250 Curtis Street"

"3700","Mr","Mike","Jackson","45211","133 BROADWAY APT. 1"

"3800","Mrs","Rita","Doe","97213","2000 Humboldt Str., #6"

"3900","Mr","George","Howe","75243","111 B Parkway, #23"

"4000","Mr","Frank","Miller","95054","27 5th Str., 76"

"4100","Mrs","Susan","Baker","90018","200 MAIN STREET, #94"

"4200","Mr","Joseph","Peters","92714","700 S. Ash Str., APT.12"

"4300","Company","?","TOOLware","20019","410 Mariposa Str., # 10"

"4400","Mr","Antony","Jenkins","20903","55 A Parkway, #15"