最近做櫃檯開發,自己通過c++ ocilib執行 oracle資料庫的儲存過程,獲取分頁表資訊,儲存過程如下:
create or replace procedure p_rm_paging_query
(p_pagesql in varchar2, --sql
p_curpage in out number , --當前頁
p_pagesize in out number , --每頁顯示記錄的條數
p_totalrecords out number, --總記錄數
p_totalpages out number , -- 總頁數
pageresultset out sys_refcursor -- 輸出結果集游標)as
v_sql varchar2(2000):=''; --sql語句
v_startrecord number; --開始顯示的記錄數
v_endrecord number; --結束顯示的記錄條數
begin
--記錄總記錄條數
v_sql:='select count(*) from (' || p_pagesql || ')';
execute immediate v_sql into p_totalrecords;
if mod(p_totalrecords,p_pagesize)=0 then
--得到整數則直接取得到的頁碼數否在原來的基礎上增加乙個頁碼
p_totalpages:=p_totalrecords/p_pagesize;
else
p_totalpages:=p_totalrecords/p_pagesize+1;
end if;
--驗證頁號
if p_curpage<1 then
p_curpage:=1;
end if;
--如果取的當前頁大於總頁數則取最大頁數的資料
if p_curpage>p_totalpages then
p_curpage:=p_totalpages;
end if;
--實現分頁查詢
v_startrecord :=(p_curpage - 1) * p_pagesize + 1;
v_endrecord :=p_curpage * p_pagesize;
v_sql := 'select * from (select t.*, rownum rn from (' || p_pagesql || ') t where rownum<=' || v_endrecord || ' ) where rn>=' ||v_startrecord;
p_totalpages:=floor(p_totalpages); --去整數總頁
open pageresultset for v_sql;
exception
when others then
close pageresultset;
end p_rm_paging_query;
兩個引數不傳入則會出現異常丟擲。
發現如果在oracle 11g下面執行如上儲存過程,如果執行過程中如果丟擲異常,如果不執行紅色部分,就可能導致游標洩漏。但是在oracle 10g下其實並無此問題。
當 p_curpage in out number , --當前頁
p_pagesize in out number , --每頁顯示記錄的條數
關於「ORA 01000 超出開啟游標的最大數」
當我們需要查詢資料庫,並且返回的結果集有多條記錄時,如何一條條的定位讀取記錄呢?這時候就需要游標了。oracle中所謂的游標,用來標記當前所指向的位置,預設是在第一條記錄之前,rs.next,就下移一位,一直到最後一條記錄之後。資料庫的連線一般都會占用一定的資源,如何保證連線的速度以及系統的效率,實...
10案例分析
銀行 信用風險,即客戶違約風險,是銀行風險管控的主要內容。不同行業,不同企業,財務指標的風險程度不同。假資料,假資訊,假報表的現象,財務資訊的質量問題有三個方面是非常重要的 1.建立識別假報表的管理體系 2.研究建立財務資訊的勾稽關係,即通過相互之間的購機關係的檢驗來判別資料的質量 3.建立資料的錄...
3 20210405 1 案例分析作業
這個作業屬於哪個課程 軟工 2018級計算機二班 這個作業要求在 3 20210405 1 案例分析作業 這個作業的目標 學會對產品的調研和分析 學號20188434 目錄第二部分 分析 參考8.6節對工作的估計,和14.1節軟體工程的質量 第三部分 建議和規劃 參考 構建之法 第8章功能的定位和優...