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
# 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 ();
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]}");
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'");
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";
}
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"