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

SQL Anywhere 12.0.1 (Deutsch) » MobiLink - Serveradministration » MobiLink-Servertechnologie » Synchronisationsmethoden

 

Download einer Ergebnismenge aus Aufruf einer gespeicherten Prozedur

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;