資源描述:
《oracle通用分頁存儲過程的創(chuàng)建與使用》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在學(xué)術(shù)論文-天天文庫。
1、Oracle通用分頁存儲過程的創(chuàng)建與使用Postedon2011-09-0416:27孤獨(dú)者閱讀(724)評論(0)編輯收藏1.創(chuàng)建Oracle包的定義。使用REFCURSOR數(shù)據(jù)類型來處理Oracle結(jié)果集。REFCURSOR足一個(gè)指向PL/SQL查詢所返回的結(jié)果糶的指針。與普通的游標(biāo)不冋,REFCURSOR足一個(gè)變蛍,它足對游標(biāo)的引川,可以在執(zhí)行時(shí)將其沒置為桁向不同的結(jié)果集。使川REFCURSOR輸出參數(shù)可以將Oracle結(jié)構(gòu)化程序的結(jié)果集傳遞回調(diào)川應(yīng)川程序。通過在調(diào)用應(yīng)用程序屮定義OracleType.Cursor數(shù)據(jù)類型的輸出參數(shù),可以訪問REFCURSO
2、R所指向的結(jié)果集。createorreplacepackageMF_PAK_001istypet_cursorisrefcursor;procedureGetDataByPage(p_tableNamevarchar2,p_fieldsvarchar2,p_filtervarchar2zp_sortvarchar2,p_curPagenumber,p_pageSizenumber,pcursorouttcursor,p_totalRecordsoutnumber);endMF_PAK_001;2.創(chuàng)建包體。迕包體中實(shí)現(xiàn)具體的分貝存儲過程。createorrepla
3、cepackagebodyMF_PAK_001isprocedureGetDataByPage(p_tableNamevarchar2,--要齊i句的表名p_fieldsvarchar2,--耍奔詢的字段p_filtervarchar2,--過濾條件p_sortvarchar2,排序字段及方向p_curPagenumber,p_pageSizenumber,pcursorouttcursor,p_totalRecordsoutnumber)isv_sqlvarchar2(1000):=11v_startRecordnumber(4);v_endRecordnumb
4、er(4);begin--獲取總的記錄數(shù)v_sql:二,selectto_number(count(*))from1p_tableName;ifp_filterisnotnullthenv_sql:=v_sql'where1=1and'p_filter;endif;executeimmediatev_sqlintop_totalRecords;v_startRecord:=(p_curPage1)*p_pageSize;v_endRecord:^p_curPage*p_pageSize;v_sql:=1select1p_fields
5、1from(select1p_
6、fields1zrownumrfrom1'(select1p_fields1from1p_tableName;ifp_filterisnotnullthenv_sql:=v_sql'where1=1and'p_filter;endif;ifp_sortisnotnullthenv_sql:^v_sql'orderby'p_sort;endif;v_sql:=v_sql')Awhererownum<=1to_char(v_endRecord)1)Bwherer>=1to_char(v_startRecord);openp_cursorforv_sql;endGetD
7、ataByPage;endMF_PAK_001;2.在Oracle中編寫查詢語川,執(zhí)行包體中的分頁存儲過程,看足否能夠正確執(zhí)行。declarev_curMF_PAK_001.t_cursor;v_jobjobs%rowtype;v_totalRecordsnumber;beginMF_PAK_001.GetDataByPage('jobs',1job_idzjob_title,min_salary,max_salary1,'min_salary>01,'job_idasc1,1,10,v_curzv_totalRecords);fetchv_curintov」ob
8、;whilev_cur%foundloopdbms_output.put_line(v_job.job_id?v_job.job_title);fetchv_curintov_job;endloop;dbms_output.put_line(1總記;玫數(shù)’v_totalRecords);end;3.在.NET巾調(diào)用該分奴存儲過程。stringconnstring="DataSource=ORCL;UserId=hr;Password=Pwdl23456";OracleConnectionconn=newOracleConnection(connString);Or
9、ac1eC