페이지 별 저장 프로시저 - oracle 버 전

9736 단어 Oacle
Oracle 에서 페이지 별 저장 과정 을 사용 하 는 것 은 Sql Server 와 비교 할 때 복잡 하고 데이터 세트 의 반환 은 커서 를 사용 해 야 합 니 다.본인 의 페이지 별 저장 과정 은 Oracle 패키지 에서 이 루어 졌 습 니 다. -우선 "NCID = '1' and NDate = '2012 - 1 - 1'" CREATE OR REPLACE PACKAGE PKG 와 같은 헤더 부분 -- pFilter 인 자 를 검색 조건 문자열 로 정의 합 니 다.NEWS IStype CurBase is ref cursor;procedure SearchNews (pFilter in varchar2,pPage number,pRecordPerPage out number,pAllRecord out number,CurNews out CurBase);END;--그리고 가방 의 주체 부분 을 정의 합 니 다. CREATE OR REPLACE PACKAGE BODY PKG뉴스 IS - 뉴스 검색, 페이지 부분 에 주의 하면 다시 최적화 할 수 있 습 니 다.procedure SearchNews (pFilter in varchar2,pPage number,pRecordPerPage out number,pAllRecord out number,CurNews out CurBase) isvSQL Varchar(1000);begin  pRecordPerPage:=30;  vSQL:='select count(*) from V3News where (1=1)  ' || pFilter;  execute immediate vSQL into pAllRecord;  vSQL:='select RNum,NID,NCID,NCName,NFrom,NName,NDate,NClick from (select RowNum RNum,V3News.* from V3News where (1=1) '|| pFilter || ') V3News  where RNum>' || to_char((pPage-1)*pRecordPerPage) || ' and RNum<=' || to_char(pPage*pRecordPerPage);  open CurNews for vSQL ;end;END;.net 프로그램 DAO 층
using System;

using System.Collections.Generic;

using System.Text;

using System.Data;

using System.Data.OracleClient;



namespace NewsDal

{

    /// <summary>

    ///   Oracle     

    //////     :2007-5-25

    ///////// </summary>

    public class News

    {

        private OracleProvider objDBConn = new OracleProvider();

        private OracleConnection objConn;

        private OracleCommand objCmd;

        private OracleDataAdapter objDA;

        private DataSet objDS;

        private OracleParameter objPA;



        /// <summary>

        ///       

        /// </summary>

        public DataTable GetPageNews(int ipage, out int irecordperpage, out double iallrecord)

        {

            irecordperpage = 0;

            iallrecord = 0;

            try

            {

                objConn = objDBConn.Conn;

                objCmd = new OracleCommand("PKG_News.GetPageNews", objConn);

                objCmd.CommandType = CommandType.StoredProcedure;

                objPA = new OracleParameter("pPage", ipage);

                objCmd.Parameters.Add(objPA);

                objPA = new OracleParameter("pRecordPerPage", OracleType.Number);

                objPA.Direction = ParameterDirection.Output;

                objCmd.Parameters.Add(objPA);

                objPA = new OracleParameter("pAllRecord", OracleType.Number);

                objPA.Direction = ParameterDirection.Output;

                objCmd.Parameters.Add(objPA);

                OracleParameter curNews = new OracleParameter("CurNews", OracleType.Cursor);

                curNews.Direction = ParameterDirection.Output;

                objCmd.Parameters.Add(curNews);

                objDA = new OracleDataAdapter(objCmd);

                objDS = new DataSet();

                if (objConn.State == ConnectionState.Closed)

                    objConn.Open();



                objCmd.ExecuteNonQuery();

                objDA.Fill(objDS, "V3News");

                if (objCmd.Parameters["pRecordPerPage"].Value == DBNull.Value || objCmd.Parameters["pRecordPerPage"].Value.ToString() == "")

                    irecordperpage = 0;

                else

                    irecordperpage = Convert.ToInt32(objCmd.Parameters["pRecordPerPage"].Value);

                if (objCmd.Parameters["pAllRecord"].Value == DBNull.Value || objCmd.Parameters["pAllRecord"].Value.ToString() == "")

                    iallrecord = 0;

                else

                    iallrecord = Convert.ToDouble(objCmd.Parameters["pAllRecord"].Value);

                return objDS.Tables["V3News"];

            }

            catch (Exception e)

            {

                throw e;

            }

            finally

            {

                if (objConn.State == ConnectionState.Open)

                    objConn.Close();

            }

        }

    }

}

좋은 웹페이지 즐겨찾기