可以从存储过程调用中下载结果集。例如,您目前可能有下表的 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 + "'" );
}
}SQL Anywhere Studio 9.0.2
版权所有 © 1989–2005 Sybase, Inc. 部分版权所有 © 2001–2005 iAnywhere Solutions, Inc. 保留所有权利。