可以从存储过程调用中下载结果集。例如,您目前可能有下表的 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 是一个存储过程,它接受两个参数(上次下载时间戳和 MobiLink 用户名)并返回结果集。(此示例使用 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 脚本只传入两个参数,而不是三个。对于 Oracle 中返回结果集的存储过程,在存储过程定义中声明为参数的游标类型定义结果集的结构,但不这样定义真正的参数。本示例中,存储过程同样将该脚本添加到 MobiLink 系统表中。
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 |