Как я могу разбить на страницы вывод вызываемой инструкции / подготовленной процедуры в моем JSP? - PullRequest
1 голос
/ 16 августа 2011

У меня есть эта процедура в одном из пакетов:

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));

В настоящее время все данные извлекаются из таблицы. Я хочу изменить это, поэтому он будет тянуть определенное количество строк на нескольких страницах. Я просмотрел все и обнаружил, как выполнять разбиение на страницы JSP, когда использую SQL-запрос в самом коде Java, но я не нашел ни одного примера, который бы демонстрировал это, используя выражение package и callable.

Как я могу изменить этот код, чтобы я мог использовать нумерацию страниц JSP?

1 Ответ

3 голосов
/ 16 августа 2011

Добавьте размер страницы и номер страницы к вашей процедуре.

Добавьте нумерацию строк по вашему запросу, а затем верните записи, в которых номер строки> ((размер страницы - 1) * номер страницы + 1) и номер строки <= (размер страницы * номер страницы) </p>

Если вам нужен ответ более низкого уровня, я могу перевести его в соответствующий код.


ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Мой синтаксис 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;

// ява

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));

Вы вызываете процедуру через Java с другим страницей, когда вам требуется страница, отличная от отображаемой.

...