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 ) |
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. (Dieses Beispiel verwendet aus Gründen der Portierbarkeit eine ODBC-Aufrufkonvention):
{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 SPDownload @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 |
Folgendes Beispiel ist für Oracle geeignet. Oracle erfordert die Definition eines Pakets. Dieses Paket muss einen Datensatztyp für die Ergebnismenge enthalten und einen Cursortyp, der den Datensatztyp zurückgibt.
Create or replace package SPInfo as Type SPRec is record ( pk integer, col1 varchar(100), col2 varchar(20) ); Type SPCursor is ref cursor return SPRec; End SPInfo; |
Außerdem benötigt Oracle eine gespeicherte Prozedur mit dem Cursortyp als erstem Parameter. Beachten Sie, dass das download_cursor-Skript nur zwei Parameter übergibt, nicht drei. Bei gespeicherten Prozeduren, die in Oracle Ergebnismengen übergeben, legen die Cursortypen, die in der gespeicherten Prozedur als Parameter definiert sind, die Struktur der Ergebnismenge fest und stellen keine echten Parameter dar. In diesem Beispiel fügt die gespeicherte Prozedur das Skript auch der MobiLink-Systemtabelle hinzu.
Create or replace procedure DownloadMyTable( v_spcursor IN OUT SPInfo.SPCursor, v_last_dl_ts IN DATE, v_user_name IN VARCHAR ) As Begin Open v_spcursor For select pk, col1, col2 from MyTable where last_modified >= v_last_dl_ts and employee = v_user_name; End; CALL ml_add_table_script( 'v1', 'MyTable', 'download_cursor', '{CALL DownloadMyTable( {ml s.last_table_download},{ml s.username} )}' ); |
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; |
Folgendes Beispiel ist für IBM DB2 Mainframe geeignet.
CREATE PROCEDURE DownloadMyTable( IN last_dl_ts TIMESTAMP, IN u_name VARCHAR( 128 ) ) LANGUAGE SQL MODIFIES SQL DATA EXTERNAL NAME MYDMT WLM ENVIRONMENT MYWLM 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. Senden Sie uns Feedback über diese Seite via E-Mail. |
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |