Diese Prozedur ermöglicht es einer Anwendung, eine SQL-Anweisung auf einem Fremdserver auszuführen und die von dieser Anweisung
generierten Ergebnismengen abzurufen. Die SQL-Anweisung wird wortgetreu an den Fremdserver gesendet und daher muss SQL Anywhere
nicht in der Lage sein, die Anweisung syntaktisch zu analysieren.
Um diese Systemprozedur zu benutzen, müssen Sie den Fremdserver mit der CREATE SERVER-Anweisung definieren.
Anders als bei der FORWARD TO-Anweisung kann sp_forward_to_remote_server innerhalb von Prozeduren verwendet werden. Jedoch
kann diese gespeicherte Prozedur nicht in der FROM-Klausel einer SELECT-Anweisung verwendet werden, da das Schema der entfernten
Ergebnismengen beliebig ist. Sie können entfernte Ergebnismengen abrufen, indem Sie einen Cursor für eine gespeicherte Prozedur
deklarieren, der in der sp_forward_to_remote_server-Prozedur aufgerufen wird.
Hinweis
Wenn die SQL-Anweisung mehrere Ergebnismengen zurückgibt, liefert die gespeicherte Prozedur sp_forward_to_remote_server jede
entfernte Ergebnismenge einzeln.
Es gibt keine lokalen Nebenwirkungen bei der Ausführung dieser gespeicherten Prozedur, aber da die SQL-Anweisung, die auf
dem Fremdserver ausgeführt wird, beliebig ist, können auf dem Fremdserver Nebenwirkungen auftreten.
Das folgende Beispiel verwendet die gespeicherte Prozedur sp_forward_to_remote_server und eine lokale Funktion, um die Anzahl
der Tabellen zu ermitteln, die eine entfernte SQL Anywhere 12-Datenbank hat.
Führen Sie den folgenden Befehl aus, um zwei Datenbanken namens testdb1 und testdb2 zu erstellen.
dbinit testdb1
dbinit testdb2
Starten Sie beide Datenbanken mit demselben SQL Anywhere-Server.
dbeng12 -n mytest testdb1 testdb2
Verbinden Sie sich über Interactive SQL mit testdb1.
Erstellen Sie auf testdb2 einen Datenfernzugriffsserver.
CREATE SERVER rem CLASS 'saodbc' USING 'driver=SQL Anywhere 12 ;
eng = mytest ; dbn = testdb2 ; links = SharedMemory'
Nehmen Sie an, dass externe Logins nicht erforderlich sind. Erstellen Sie die lokale Funktion, die sp_forward_to_remote_server
aufruft.
CREATE FUNCTION fetch_num_remote_tables ( IN server char(128) ) RETURNS int
BEGIN
DECLARE num_tables int;
DECLARE curs CURSOR FOR CALL sp_forward_to_remote_server
( server, 'SELECT COUNT(*) FROM sys.systable' );
OPEN curs;
FETCH next curs INTO num_tables;
CLOSE curs;
RETURN num_tables;
END
Rufen Sie die Anzahl der Tabellen vom Fremdserver ab.