Sie können den Download einer Ergebnismenge aus einem Aufruf einer gespeicherten Prozedur durchführen. Beispiel: Sie benutzen ein download_cursor-Skript für folgende Tabelle:
CREATE TABLE MyTable ( pk INTEGER PRIMARY KEY NOT NULL, col1 VARCHAR(100) NOT NULL, col2 VARCHAR(20) NOT NULL employee VARCHAR(100) NOT NULL last_modified TIMESTAMP NOT NULL DEFAULT TIMESTAMP ) |
Das Tabellenskript download_cursor kann z.B. wie folgt aussehen:
SELECT pk, col1, col2 FROM MyTable WHERE last_modified >= {ml s.last_table_download} AND employee = {ml s.username} |
Wenn Sie Downloads in Tabelle MyTable durchführen wollen, um eine komplexere Unternehmenslogik einzusetzen, können Sie nun Ihr Skript wie folgt erstellen, wobei DownloadMyTable eine gespeicherte Prozedur ist, die zwei Parameter übernimmt (Zeitstempel des letzten Downloads und MobiLink-Benutzername) und eine Ergebnismenge zurückgibt. (In diesem Beispiel wird aus Gründen der Portierbarkeit eine ODBC-Aufrufkonvention verwendet.):
{call DownloadMyTable( {ml s.last_table_download}, {ml s.username} )} |
Im Folgenden finden Sie einige Beispiele für die verschiedenen unterstützten konsolidierten Datenbanken. Einzelheiten hierzu können Sie der Dokumentation Ihrer konsolidierten Datenbank entnehmen.
Das folgende Beispiel ist für SQL Anywhere-, Adaptive Server Enterprise- und Microsoft SQL Server geeignet.
CREATE PROCEDURE DownloadMyTable @last_dl_ts DATETIME, @u_name VARCHAR( 128 ) AS BEGIN SELECT pk, col1, col2 FROM MyTable WHERE last_modified >= @last_dl_ts AND employee = @u_name END |
Bei Oracle kann die Ergebnismenge von einem REF CURSOR-Parameter zurückgegeben werden, der in einer gespeicherten Prozedur definiert ist. Wenn Sie jedoch den iAnywhere Solutions 12 - Oracle ODBC-Treiber verwenden, sollten Sie den REF CURSOR-Parameter als letzten in der Parameterliste der gespeicherten Prozedur definieren. Der REF CURSOR-Parameter kann als OUT oder IN OUT definiert werden. Die folgende gespeicherte Prozedur ist für Oracle geeignet.
create or replace procedure DownloadMyTable( v_last_dl_ts IN TIMESTAMP, v_user_name IN VARCHAR, v_ref_crsr OUT SYS_REFCURSOR ) As Begin Open v_ref_crsr For select pk, col1, col2 from MyTable where last_modified >= v_last_dl_ts and employee = v_user_name; End DownloadMyTable; |
Verwenden Sie als Nächstes die gespeicherte Prozedur ml_add_table_script, um einen Aufruf von DownloadMyTable als download_cursor-Skript für die Synchronisationstabelle MyTable zu definieren:
CALL ml_add_table_script( 'v1', 'MyTable', 'download_cursor', '{CALL DownloadMyTable( {ml s.last_table_download},{ml s.username} )}' ); |
Bei Oracle müssen Sie beachten, dass die gespeicherte Prozedur DownloadMyTable nur zwei Parameter annimmt, nicht drei, und der MobiLink-Server die Ergebnismenge über den REF CURSOR-Parameter abruft. REF CURSOR ist als letzter Parameter in der Definition der gespeicherten Prozedur definiert.
Folgendes Beispiel ist für IBM DB2 LUW geeignet.
CREATE PROCEDURE DownloadMyTable( IN last_dl_ts TIMESTAMP, IN u_name VARCHAR( 128 ) ) LANGUAGE SQL MODIFIES SQL DATA COMMIT ON RETURN NO DYNAMIC RESULT SETS 1 BEGIN DECLARE C1, cursor WITH RETURN FOR SELECT pk, col1, col2 FROM MyTable WHERE last_modified >= last_dl_ts AND employee = u_name; OPEN C1; END; |
![]() |
Kommentieren Sie diese Seite in DocCommentXchange.
|
Copyright © 2010, iAnywhere Solutions, Inc. - SQL Anywhere 12.0.0 |