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

SQL Anywhere 11.0.1 (Deutsch) » SQL Anywhere Server - Programmierung » SQL Anywhere Datenzugriff-APIs » Unterstützung für externe Umgebungen in SQL Anywhere

 

Die externe PERL-Umgebung

SQL Anywhere stellt Unterstützung für gespeicherte Perl-Prozeduren und -Funktionen bereit. Eine gespeicherte Perl-Prozedur oder Funktion verhält sich wie eine gespeicherte SQL-Prozedur oder Funktion, abgesehen davon, dass der Code für die Prozedur oder Funktion in Perl geschrieben ist und die Ausführung der Prozedur oder Funktion außerhalb des Datenbankservers stattfindet (d.h. innerhalb einer Perl-Programminstanz). Beachten Sie, dass es eine separate Instanz des Perl-Programms für jede Verbindung gibt, die gespeicherte Perl-Prozeduren und Funktionen verwendet. Dieses Verhalten unterscheidet sich von gespeicherten Java- Prozeduren und Funktionen. Bei Java gibt es eine Instanz der Java VM für jede Datenbank statt einer Instanz für jede Verbindung. Der andere Hauptunterschied zwischen Perl und Java besteht darin, dass gespeicherte Perl-Prozeduren keine Ergebnismengen zurückgeben, während gespeicherte Java-Prozeduren Ergebnismengen zurückgeben können.

Es gibt einige Voraussetzungen für die Verwendung der Unterstützung für Perl in der Datenbank:

  1. Perl muss auf dem Datenbankserver-Computer installiert sein und der SQL Anywhere-Datenbankserver muss in der Lage sein, die Position des Perl-Programms zu ermitteln.

  2. Der DBD::SQLAnywhere-Treiber muss auf dem Datenbankserver-Computer installiert sein.

  3. Unter Windows muss Microsoft Visual Studio ebenfalls installiert sein. Dies ist eine Voraussetzung, um den DBD::SQLAnywhere-Treiber installieren zu können.

Weitere Hinweise zur Installation des DBD::SQLAnywhere-Treibers finden Sie unter SQL Anywhere Perl DBD::SQLAnywhere DBI-Modul.

Zusätzlich zu den obenstehenden Voraussetzungen muss der Datenbankadministrator auch das Modul "SQL Anywhere Perl External Environment" installieren. So installieren Sie das Modul für die externe Umgebung:

♦  So installieren Sie das externe Umgebungsmodul (Windows)
♦  So installieren Sie das Module für die externe Umgebung (Unix)

Wenn das Modul für die externe Perl-Umgebung kompiliert und installiert wurde, kann die Unterstützung für Perl in der Datenbank verwendet werden. Beachten Sie, dass die Unterstützung für Perl in der Datenbank nur für SQL Anywhere-Datenbanken der Version 11 oder später zur Verfügung steht. Wenn eine SQL Anywhere 10-Datenbank geladen ist und Sie versuchen, die Unterstützung für Perl in der Datenbank zu verwenden, wird ein Fehler zurückgegeben, der angibt, dass externe Umgebungen nicht unterstützt werden.

Um Perl in der Datenbank zu verwenden, achten Sie darauf, dass der Datenbankserver in der Lage ist, die Position des Perl-Programms zu ermitteln und es zu starten. Sie überprüfen dies, indem Sie Folgendes ausführen:

START EXTERNAL ENVIRONMENT PERL;

Wenn der Datenbankserver Perl nicht starten kann, liegt das Problem wahrscheinlich daran, dass der Datenbankserver nicht in der Lage ist, das Perl-Programm zu finden. In diesem Fall sollten Sie eine Anweisung ALTER EXTERNAL ENVIRONMENT ausführen, um den Speicherort des Perl-Programms explizit einzustellen. Achten Sie darauf, den Programmdateinamen einzubeziehen.

ALTER EXTERNAL ENVIRONMENT PERL 
  LOCATION 'Perl-Pfad';

Zum Beispiel:

ALTER EXTERNAL ENVIRONMENT PERL
  LOCATION 'c:\\Perl\\bin\\perl.exe';

Beachten Sie, dass die Anweisung START EXTERNAL ENVIRONMENT PERL nur benötigt wird, um zu überprüfen, ob der Datenbankserver in der Lage ist, Perl zu starten. Üblicherweise startet Perl automatisch, wenn Sie einen Aufruf einer gespeicherten Perl-Prozedur oder Funktion durchführen.

Die Anweisung STOP EXTERNAL ENVIRONMENT PERL ist auch nicht erforderlich, um eine Instanz von Perl zu stoppen, weil die Instanz mit dem Ende der Verbindung automatisch beendet wird. Wenn Sie allerdings die Arbeit mit Perl abgeschlossen haben und Ressourcen freigeben wollen, entfernt die Anweisung STOP EXTERNAL ENVIRONMENT PERL die Perl-Instanz für Ihre Verbindung.

Wenn Sie überprüft haben, dass der Datenbankserver das Perl-Programm starten kann, besteht der nächste Schritt darin, den erforderlichen Perl-Code in der Datenbank zu installieren. Sie erreichen dies, indem Sie die Anweisung INSTALL verwenden. Sie können beispielsweise die folgende Anweisung ausführen, um ein Perl-Skript von einer Datei in der Datenbank zu installieren.

INSTALL EXTERNAL OBJECT 'Perl-Skript' 
  NEW 
  FROM FILE 'Perl-Datei'
  ENVIRONMENT PERL;

Perl-Code kann wie folgt aus einem Ausdruck extrahiert und installiert werden:

INSTALL EXTERNAL OBJECT 'Perl-Skript' 
  NEW
  FROM VALUE 'Perl-Anweisungen'
  ENVIRONMENT PERL;

Perl-Code kann wie folgt aus einer Variablen extrahiert und installiert werden:

CREATE VARIABLE PerlVariable LONG VARCHAR;
SET PerlVariable = 'Perl-Anweisungen';
INSTALL EXTERNAL OBJECT 'Perl-Skript' 
  NEW 
  FROM VALUE PerlVariable
  ENVIRONMENT PERL;

Um Perl aus der Datenbank zu entfernen, verwenden Sie die Anweisung REMOVE:

REMOVE EXTERNAL OBJECT 'Perl-Skript'

Um bestehenden Perl-Code zu ändern, können Sie die UPDATE-Klausel der Anweisung INSTALL EXTERNAL OBJECT verwenden:

INSTALL EXTERNAL OBJECT 'Perl-Skript' 
  UPDATE 
  FROM FILE 'Perl-Datei'
  ENVIRONMENT PERL
INSTALL EXTERNAL OBJECT 'Perl-Skript' 
  UPDATE 
  FROM VALUE 'Perl-Anweisungen'
  ENVIRONMENT PERL
SET PerlVariable = 'Perl-Anweisungen';
INSTALL EXTERNAL OBJECT 'Perl-Skript' 
  UPDATE 
  FROM VALUE PerlVariable
  ENVIRONMENT PERL
  

Wenn der Perl-Code in der Datenbank installiert ist, können Sie die erforderlichen gespeicherten Perl-Prozeduren und -Funktionen erstellen. Wenn Sie gespeicherte Perl-Prozeduren und Funktionen erstellen, ist LANGUAGE immer PERL und die Zeichenfolge EXTERNAL NAME enthält die Informationen, die erforderlich sind, um die Perl-Subroutinen aufzurufen und OUT-Parameter sowie Rückgabewerte zurückzugeben. Die folgenden globalen Variablen stehen für den Perl-Code bei jedem Aufruf zur Verfügung:

  • $sa_perl_return   Wird verwendet, um einen Rückgabewert für einen Funktionsaufruf festzulegen.

  • $sa_perl_argN   Dabei gilt: N ist eine positive Ganzzahl [0 .. n]. Wird verwendet, um die SQL Argumente an den Perl-Code zu übergeben. Beispiel: $sa_perl_arg0 bezieht sich auf Argument 0, $sa_perl_arg1 bezieht sich auf Argument 1, usw.

  • $sa_perl_default_connection   Wird verwendet, um serverseitige Perl-Aufrufe durchzuführen.

  • $sa_output_handle   Wird verwendet, um Ausgaben des Perl-Codes an das Fenster "Datenbankservermeldungen" zu senden.

Eine gespeicherte Perl-Prozedur kann mit allen Datentypen für Eingabe- und Ausgabeargumente sowie für den Rückgabewert erstellt werden. Allerdings werden bei der Durchführung des Perl-Aufrufs alle nicht-binären Datentypen Zeichenfolgen zugeordnet, während Binärdaten einem Array von Zahlen zugeordnet werden. Es folgt ein einfaches Perl-Beispiel:

INSTALL EXTERNAL OBJECT 'SimplePerlExample' 
  NEW 
  FROM VALUE 'sub SimplePerlSub{ 
    return( ($_[0] * 1000) + 
            ($_[1] * 100) + 
            ($_[2] * 10) + 
            $_[3] ); 
  }'
  ENVIRONMENT PERL;

CREATE FUNCTION SimplePerlDemo( 
    IN thousands INT, 
    IN hundreds INT, 
    IN tens INT, 
    IN ones INT) 
  RETURNS INT
  EXTERNAL NAME '<file=SimplePerlExample> 
    $sa_perl_return = SimplePerlSub(
      $sa_perl_arg0, 
      $sa_perl_arg1, 
      $sa_perl_arg2, 
      $sa_perl_arg3)' 
  LANGUAGE PERL;

// The number 1234 should appear
SELECT SimplePerlDemo(1,2,3,4);

Das folgende Perl-Beispiel nimmt eine Zeichenfolge und schreibt sie in das Fenster "Datenbankservermeldungen":

INSTALL EXTERNAL OBJECT 'PerlConsoleExample'
  NEW
  FROM VALUE 'sub WriteToServerConsole { print $sa_output_handle $_[0]; }'
  ENVIRONMENT PERL;

CREATE PROCEDURE PerlWriteToConsole( IN str LONG VARCHAR) 
  EXTERNAL NAME '<file=PerlConsoleExample> 
    WriteToServerConsole( $sa_perl_arg0 )'
  LANGUAGE PERL;

// 'Hello world' should appear in the database server messages window
CALL PerlWriteToConsole( 'Hello world' ); 

Um serverseitiges Perl zu verwenden, muss der Perl-Code die Variable $sa_perl_default_connection verwenden. Das folgende Beispiel erstellt eine Tabelle und ruft dann eine gespeicherte Perl-Prozedur auf, um die Tabelle mit Daten zu füllen:

CREATE TABLE perlTab(c1 int, c2 char(128));

INSTALL EXTERNAL OBJECT 'ServerSidePerlExample' 
  NEW 
  FROM VALUE 'sub ServerSidePerlSub 
    { $sa_perl_default_connection->do( 
        "INSERT INTO perlTab SELECT table_id, table_name FROM SYS.SYSTAB" ); 
      $sa_perl_default_connection->do( 
        "COMMIT" ); 
    }'
  ENVIRONMENT PERL;

CREATE PROCEDURE PerlPopulateTable() 
  EXTERNAL NAME '<file=ServerSidePerlExample> ServerSidePerlSub()' 
  LANGUAGE PERL;

CALL PerlPopulateTable();

// The following should return 2 identical rows
SELECT count(*) FROM perlTab 
UNION ALL 
SELECT count(*) FROM SYS.SYSTAB;

Weitere Hinweise und Beispiele zur Unterstützung für Perl in der Datenbank finden Sie unter den Beispielen, die sich im Verzeichnis Beispielverzeichnis\SQLAnywhere\ExternalEnvironments\Perl befinden.