1

我在其中一个包中有这个过程:

PROCEDURE get_namelist
  (
    return_code_out OUT VARCHAR2,
    return_msg_out OUT VARCHAR2,
    id_no_in IN employee.id_no%TYPE,
    name_out OUT employee.name%TYPE,
        addr_out OUT employee.addr%TYPE
  )
  IS

  BEGIN

    return_code_out := '0000';
    return_msg_out := 'OK';

    SELECT i.name, i.addr INTO name_out, addr_out
      FROM employee i
     WHERE i.id_no = id_no_in;

END get_namelist;

我在我的 Java 中这样调用这个过程:

DbUtil db = null;
java.sql.CallableStatement cstmt = null;


db = new DbUtil();
cstmt = db.prepareCall("{ call jack.PACK_EMPLOYEE.get_namelist(?, ?, ?, ?, ?) }");

cstmt.registerOutParameter(1,OracleTypes.VARCHAR);
cstmt.registerOutParameter(2,OracleTypes.VARCHAR);
cstmt.setString(3,this.getIdNo());
cstmt.registerOutParameter(4,OracleTypes.VARCHAR);
cstmt.registerOutParameter(5,OracleTypes.VARCHAR);
stmt.execute();

this.setName(cstmt.getString(4));
this.setAddress(cstmt.getString(5));

目前它正在从表中提取所有数据。我想改变它,所以它会将一定数量的行拉到多个页面中。当我在 Java 代码本身中使用 SQL 查询时,我四处查看并发现了如何进行 JSP 分页,但我找不到任何使用包和可调用语句来显示这一点的示例。

如何修改此代码以便使用 JSP 分页?

4

1 回答 1

3

将页面大小和页码添加到您的程序中。

在查询中添加行编号,然后返回行号 > ((page size - 1) * page number + 1) 和 row number <= (page size * page number) 的记录

如果您需要更底层的答案,我可以将其翻译成相关代码。


免责声明:我的 Oracle 语法可能很糟糕。请参阅Oracle ROW_NUMBER描述(最后一个示例)了解我如何尝试构建它。

//程序

PROCEDURE get_namelist
  (
    return_code_out OUT VARCHAR2,
    return_msg_out OUT VARCHAR2,
    id_no_in IN employee.id_no%TYPE,
    page_num IN (int datatype),              
    page_size IN (int datatype),             
    name_out OUT employee.name%TYPE,
       addr_out OUT employee.addr%TYPE,
  )
  IS

  BEGIN

    return_code_out := '0000';
    return_msg_out := 'OK';

    SELECT i.name, i.addr INTO name_out, addr_out, 
         FROM 
             (SELECT e.name, e.addr,
              ROW_NUMBER() OVER (ORDER BY e.name) as row           
              FROM employee e
              WHERE e.id_no = id_no_in) i
         WHERE row between ((page_num - 1) * page_size) AND (page_num * page_size);

END get_namelist;

//java

DbUtil db = null;
java.sql.CallableStatement cstmt = null;


db = new DbUtil();
cstmt = db.prepareCall("{ call jack.PACK_EMPLOYEE.get_namelist(?, ?, ?, ?, ?, ?, ?) }");

cstmt.registerOutParameter(1,OracleTypes.VARCHAR);
cstmt.registerOutParameter(2,OracleTypes.VARCHAR);
cstmt.setString(3,this.getIdNo());
cstmt.setString(4,pagenum);
cstmt.setString(5,pagesize);
cstmt.registerOutParameter(6,OracleTypes.VARCHAR);
cstmt.registerOutParameter(7,OracleTypes.VARCHAR);
stmt.execute();

this.setName(cstmt.getString(4));
this.setAddress(cstmt.getString(5));

每当您需要与显示的页面不同的页面时,您都可以使用不同的 pagenum 通过 Java 调用该过程。

于 2011-08-16T15:12:01.667 回答