Datenbankübergreifender Zugriff auf gespeicherte Prozeduren

Wenn Sie eine gespeicherte Prozedur mit dem Befehl CREATE [OR REPLACE] PROCEDURE erstellen, fügt der Befehl die Prozedur zur Datenbank und zu dem Schema hinzu, mit der bzw. dem Sie verbunden sind. Sie können auf die Prozedur zugreifen, während eine Verbindung zu der Datenbank besteht, in der die gespeicherte Prozedur definiert ist, und Sie können auch unter Verwendung der folgenden Methoden Prozeduren in anderen Schemas derselben Datenbank oder anderer Datenbanken ausführen:

  • Verwenden Sie vollständig qualifizierte Objektnamen, wenn Sie ein Prozedurobjekt aufrufen, das sich in einer anderen Datenbank befindet. Beispiel:
    MYDB.SCHEMA(ADMIN)=> EXEC OTHERDB.SCHEMA.UPDATEACCT(); 
    
  • Verwenden Sie einen Namen aus Schema und Objekt (schema.object), wenn Sie ein Prozedurobjekt aufrufen, das in einem anderen Schema derselben Datenbank vorhanden ist. Beispiel:
    MYDB.SCHEMA(ADMIN)=> EXEC SCH_TWO.UPDATEACCT();
  • Verwenden Sie die Sitzungsvariable PATH SQL, um die Datenbanken und/oder Schemas anzugeben, in denen nach einem Prozedurnamen gesucht werden soll, der nicht vollständig qualifiziert ist. Zum Verwenden der Sitzungsvariable PATH geben Sie einen Befehl ähnlich dem folgenden ein:
    MYDB.SCHEMA(ADMIN)=> SET PATH = <elem> [, <elem>]; 
    

    Der Wert für <Element> kann eine Datenbank, ein Schema oder eine der Variablen CURRENT_CATALOG, CURRENT_USER, CURRENT_SCHEMA oder CURRENT_PATH sein. Ihre Angabe bei <Element> muss sich in einen Datenbanknamen auflösen.

    Zum Beispiel:

    MYDB.SCHEMA(ADMIN)=> SET PATH = mydb, nzdb, customer;
    SET VARIABLE
    

    Verwenden Sie zum Anzeigen des Werts für PATH den folgenden Befehl:

    
    MYDB.SCHEMA(ADMIN)=> SELECT CURRENT_PATH;
       CURRENT_PATH
    ------------------
    MYDB,NZDB,CUSTOMER
    (1 row)
    

Das Netezza Performance Server verwendet die PATH-Variable bei der Suche nach unqualifizierten Prozeduren. Ist PATH nicht festgelegt, durchsucht sie die aktuelle Datenbank; andernfalls werden die in PATH angegebenen Datenbanken und Schemas in der Reihenfolge durchsucht, in der sie angegeben wurden. Das Netezza Performance Server verwendet die erste Übereinstimmung, die es findet, auch wenn es in einer nachfolgenden Datenbank eine bessere Übereinstimmung geben könnte. Eine 'schlechtere' Übereinstimmung ist eine Übereinstimmung, die möglicherweise die implizite Umsetzung von Argumenten erfordert oder die aufgrund des Vorhandenseins mehrerer möglicher Übereinstimmungen einen Fehler verursacht. Das Performance Server-System verwendet die Sitzungsvariable PATH auch, um ausschließlich gespeicherte Prozeduren, benutzerdefinierte Funktionen (UDFs – User-defined Functions) und benutzerdefinierte Aggregate (UDAs – User-defined Aggregates) zu finden. Andere Objekttypen, wie z. B. Tabellen, Sequenzen usw., werden nicht unterstützt.

Wenn eine gespeicherte Prozedur von einer anderen Datenbank aus aufgerufen wird, werden nicht qualifizierte Objekte an Objekte in der aufrufenden Datenbank und nicht in der Datenbank gebunden, in der die gespeicherte Prozedur definiert ist. Unqualifizierte Stored Procedures, UDFs und UDAs sind Ausnahmen von dieser Regel, da das Netezza Performance Server zuerst die PATH-Variable verwendet, um nach diesen drei Objekttypen zu suchen, bevor es innerhalb der aufrufenden Datenbank sucht.

Wenn Sie beabsichtigen, datenbankübergreifende Aufrufe von gespeicherten Prozeduren vorzunehmen, die auf Daten in anderen Datenbanken zugreifen, müssen Sie sicherstellen, dass die gespeicherte Prozedur zum Referenzieren dieser Datenobjekte vollständig qualifizierte Objektnamen verwendet.

Schreiboperationen funktionieren nicht datenbankübergreifend. Sie müssen bei allen Prozeduren, die Befehle zum Einfügen, Aktualisieren, Löschen (delete), Erstellen, Abschneiden, Ändern oder Löschen (drop) enthalten, sicherstellen, dass Sie mit der Datenbank verbunden sind, in der die gespeicherte Prozedur definiert ist.