oracle中使用觸發器實現查詢分頁功能

來源:互聯網
上載者:User

   oracle包分為包規範和包體

  一:首先建立包規範

  create or replace package p_pagewithgroup is

  -- Author : 肖偉

  -- Created : 2014/3/18

  -- Purpose : 分組分頁過程

  TYPE type_cur IS REF CURSOR; --定義遊標變數用於返回記錄集

  PROCEDURE UP_GetRecordWithGroupByPage(

  tblName in varchar2, --表名

  PageSize in number, --頁面大小

  PageIndex in number, --當前頁

  IsReCount out number,--返回總條數

  strWhere in varchar2,-- 查詢條件 (注意: 不要加 where)

  strColums in varchar2, --欄位集合,逗號分割

  strSelectColums in varchar2, --欄位集合,逗號分割

  strGroup in varchar2,--分組條件陳述式

  strOrder in varchar2,-- 排序條件陳述式

  v_cur out type_cur --返回當前頁資料記錄

  );

  end p_pagewithgroup;

  二:建立包結構體

  create or replace package body p_pagewithgroup is

  PROCEDURE UP_GetRecordWithGroupByPage(

  tblName in varchar2, --表名

  PageSize in number, --頁面大小

  PageIndex in number, --當前頁

  IsReCount out number,--返回總條數

  strWhere in varchar2,-- 查詢條件 (注意: 不要加 where)

  strColums in varchar2, --欄位集合,逗號分割

  strSelectColums in varchar2, --欄位集合,逗號分割

  strGroup in varchar2,--分組條件陳述式

  strOrder in varchar2,-- 排序條件陳述式

  v_cur out type_cur --返回當前頁資料記錄

  )

  AS

  --定義變數

  v_sql VARCHAR2(8000);

  v_count number;

  v_row_start NUMBER; --開始記錄

  v_row_end NUMBER; --結束記錄

  begin

  ------------------------------------------------------------顯示總條數

  v_sql := 'select count(1) from ' || tblName;

  IF strWhere is not NULL OR strWhere <> ''

  THEN

  v_sql := v_sql || ' where ' || strWhere;

  END IF;

  IF strGroup is not null or strGroup <> ''

  then

  v_sql := v_sql || ' group by ' || strGroup;

  end if;

  DBMS_OUTPUT.put_line (v_sql);

  --v_sql:='select count(1) from BS_USER where 1=1';

  EXECUTE IMMEDIATE v_sql into v_count ;

  IsReCount:=v_count;

  ------------------------------------------------------------顯示任意頁內容

  -- IF PageSize<1 THEN

  -- PageSize:=1;

  -- END IF;

  v_row_start := (PageIndex - 1) * PageSize + 1;

  v_row_end := PageIndex * PageSize;

  v_sql:='select '||strSelectColums||' from (select t.*,RowNum as rn from (select '||strColums||' from '||tblName;

  IF strWhere is not NULL OR strWhere <> ''

  THEN

  v_sql := v_sql || ' where ' || strWhere;

  END IF;

  IF strGroup is not null or strGroup <> ''

  then

  v_sql := v_sql || ' group by ' || strGroup;

  end if;

  IF strOrder is not null or strOrder <> ''

  then

  v_sql := v_sql || ' order by ' || strOrder;

  end if;

  v_sql := v_sql ||') t) where rn between '||v_row_start||' and '||v_row_end;

  DBMS_OUTPUT.put_line (v_sql);

  open v_cur for v_sql;

  End UP_GetRecordWithGroupByPage;

  ----------------------------------------------------------

  end p_pagewithgroup;

  三:測試

  首先開啟PL/SQL command window

  SQL>declare

  -- Local variables here

  IsReCount number;--返回總條數

  my_cur p_pagewithgroup.type_cur ; --返回當前頁資料記錄

  begin

  -- Test statements here

  p_pagewithgroup.UP_GetRecordWithGroupByPage('T_DIVISION',5,1,ISReCount,' 1=1 ',' * ',' * ',null,null,my_cur );

  DBMS_OUTPUT.PUT_LINE(TO_CHAR(IsReCount));

  end;

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.