ストアド・プロシージャ・コールから結果セットをダウンロードできます。たとえば、次のテーブルに対する download_cursor があるとします。
CREATE TABLE MyTable ( pk INTEGER PRIMARY KEY NOT NULL, col1 VARCHAR(100) NOT NULL, col2 VARCHAR(20) NOT NULL ) |
download_cursor テーブル・スクリプトは次のようになります。
SELECT pk, col1, col2 FROM MyTable WHERE last_modified >= {ml s.last_table_download} AND employee = {ml s.username} |
MyTable へのダウンロードに、より高度なビジネス論理を使用する場合は、次のようにスクリプトを作成できます。DownloadMyTable は、2 つのパラメータ (最終ダウンロード・タイムスタンプと Mobile Link ユーザ名) を取り、結果セットを返すストアド・プロシージャです(この例では、移植性のため ODBC 呼び出し規則を使用しています)。
{call DownloadMyTable( {ml s.last_table_download}, {ml s.username} )} |
次に、サポートされる統合データベースごとの簡単な例を示します。詳細については、使用している統合データベースのマニュアルを参照してください。
次の例は、SQL Anywhere、Adaptive Server Enterprise、Microsoft SQL Server に適用されます。
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 |
次の例は、Oracle に適用されます。Oracle では、パッケージが定義されている必要があります。定義するパッケージには、結果セットのレコード・タイプと、レコード・タイプを返すカーソル・タイプが含まれていなければなりません。
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; |
次に、Oracle では、パッケージのカーソル・タイプが最初のパラメータに指定されているストアド・プロシージャが必要です。download_cursor スクリプトは、3 つではなく 2 つのパラメータのみを渡すことに注意してください。Oracle で結果セットを返すストアド・プロシージャの場合、ストアド・プロシージャ定義でパラメータとして宣言されているカーソル・タイプによって結果セットの構造が定義されますが、真のパラメータ自体は定義されません。この例では、ストアド・プロシージャは Mobile Link システム・テーブルへのスクリプトの追加も行います。
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} )}' ); |
次の例は、IBM DB2 LUW に適用されます。
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; |
次の例は、IBM DB2 メインフレームに適用されます。
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; |
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |