Collection Contents 上一页 下一页 PDF

MobiLink 管理指南

同步技术

从存储过程调用中下载结果集


可以从存储过程调用中下载结果集。例如,您目前可能有下表的 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 >= ?
      AND employee = ?

如果您希望到 MyTable 的下载使用更高级的业务逻辑,您可以按如下所示创建自己的脚本,其中 DownloadMyTable 是一个存储过程,它接受两个参数(上次下载的时间戳和 MobiLink 用户名)并返回结果集。(此示例使用 ODBC 调用规范以便可移植):

{call DownloadMyTable( ?, ? )}

下面是每个受支持的统一数据库的一些简单示例。有关全部详细信息,请查看统一数据库的文档。

以下示例适用于 Adaptive Server 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 要求定义一个包。此包必须包含结果集的记录类型和一个返回该记录类型的游标类型。

注意 
此示例要求 Oracle 返回一个结果集。在 [ODBC Oracle 驱动程序安装] 对话框中,您必须选择 [过程返回结果] 选项,或者在连接字符串中设置 ProcedureRetResults=1。有关安装 Oracle ODBC 驱动程序的详细信息,请参见 iAnywhere Solutions ODBC Driver for 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 中返回结果集的存储过程,在存储过程定义中声明为参数的游标类型定义结果集的结构,但不这样定义真正的参数。

Create or replace procedure
    DownloadMyTable( spcursor IN OUT SPInfo.SPCursor,
                     last_dl_ts IN DATE,
                     user_name IN VARCHAR ) As
Begin
    Open spcursor For
       select pk, col1, col2
         from MyTable
           where last_modified >= last_dl_ts
           and employee = user_name;
End;

以下示例适用于 IBM DB2 UDB。

CREATE PROCEDURE DownloadMyTable(
   IN last_dl_ts TIMESTAMP,
   IN u_name VARCHAR( 128 ) )
        EXTERNAL NAME 'DLMyTable!DownloadMyTable'
        RESULT SETS 1
        FENCED
        LANGUAGE JAVA PARAMETER STYLE DB2GENERAL

以下示例是 DLMyTable.java 中存储过程的 Java 实现。要返回结果集,必须在方法返回时使结果集保持打开:

import COM.ibm.db2.app.*;
import java.sql.*;

public class DLMyTable extends StoredProc
{
  public void DownloadMyTable(
      Date last_dl_ts,
      String u_name ) throws Exception
  {
      Connection  conn = getConnection();
      conn.setAutoCommit( false );
      Statement   s    = conn.createStatement();
      // Execute the select and leave it open.
      ResultSet   r    = s.executeQuery(
            "select pk, col1, col2 from MyTable"
                  + " where last_modified >= '"
                  + last_dl_ts
                  + "' and employee = '"
                  + u_name + "'" );
    }
}

Collection Contents 上一页 下一页 PDF