`
blueyanghualong
  • 浏览: 225311 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

一个简单的分页存储过程demo

阅读更多

 

--定义一个包和游标用于查询使用
create or replace package sp_nms_getNmslist_page_package
Authid Current_User
as
TYPE page_cursor is ref cursor;
end sp_nms_getNmslist_page_package;


--主题分页查询逻辑
CREATE OR REPLACE PROCEDURE SP_TABLE_PAGEMODEL
(
--PAGE_NOW IN NUMBER,--当前页码
--PAGE_SIZE IN NUMBER,--每页需要显示的条数
 V_BEGIN  IN NUMBER,--起始条数
 PAGE_SIZE  IN NUMBER,--每页需要显示的条数
 TABLE_NAME IN VARCHAR2,--查询的表名
 WHERESQL IN VARCHAR2,  --查询需要的where条件 eg.
 ORDERBYSQL IN VARCHAR2,--排序需要的排序条件  eg.
 ROW_COUNT OUT NUMBER,
 PAGE_COUNT OUT NUMBER,
 RS_LIST OUT SP_NMS_GETNMSLIST_PAGE_PACKAGE.PAGE_CURSOR
) IS
V_SQL VARCHAR2(1000);
V_END NUMBER:=V_BEGIN+PAGE_SIZE-1;

--V_BEGIN NUMBER:=(PAGE_NOW-1)*PAGE_SIZE+1;
--V_END NUMBER:=PAGE_SIZE*PAGE_NOW;

BEGIN
      V_SQL:='SELECT * FROM (SELECT ROWNUM R,T.* FROM (SELECT * FROM '||TABLE_NAME||') T WHERE ROWNUM<='||V_END||') WHERE R>='||V_BEGIN ;
      dbms_output.put_line(V_SQL);
      IF WHERESQL IS NOT NULL THEN
      V_SQL:=V_SQL || ' ' || WHERESQL;
      END IF;
      IF ORDERBYSQL IS NOT NULL THEN
      V_SQL:=V_SQL || ' ' ||ORDERBYSQL;
      END IF;
       dbms_output.put_line(V_SQL);
      OPEN RS_LIST FOR V_SQL;
      V_SQL:='SELECT COUNT(*) FROM '||TABLE_NAME ||' WHERE 1=1' ;
      IF WHERESQL IS NOT NULL THEN
      V_SQL:=V_SQL || ' '  ||WHERESQL;
      END IF;
      IF ORDERBYSQL IS NOT NULL THEN
      V_SQL:=V_SQL || ' ' ||ORDERBYSQL;
      END IF;
       dbms_output.put_line(V_SQL);
      EXECUTE IMMEDIATE V_SQL INTO ROW_COUNT;--立即执行此SQL语句,并将结果赋给ROW_COUNT
      IF MOD(ROW_COUNT,PAGE_SIZE)=0 THEN
         PAGE_COUNT:=ROW_COUNT/PAGE_SIZE;
      ELSE
         PAGE_COUNT:=FLOOR(ROW_COUNT/PAGE_SIZE)+1;
      END IF;

   --将异常情况插入到异常表
     EXCEPTION
      WHEN  OTHERS THEN
    SP_NM_EXCEPTION_LOG_INSERT('SP_TABLE_PAGEMODEL',SQLCODE,SP_EXCEPTION_LOG_OPERATIONTYPE.C_SELECT);
END;


------创建一个用于存储异常的表 
-- Create table
create table MMS_NM_EXCEPTION_LOGS
(
  ID             VARCHAR2(19) not null,
  PROCEDURE_NAME VARCHAR2(50) not null,
  EXCEPTION_TYPE VARCHAR2(500),
  OPERATION_TYPE NUMBER not null,
  OCCUR_TIME     DATE not null
)
tablespace MMSALBUM_SERVICE_DAT
  pctfree 10
  initrans 1
  maxtrans 255
  storage
  (
    initial 64K
    next 1M
    minextents 1
    maxextents unlimited
    pctincrease 0
  );
-- Add comments to the table 
comment on table MMS_NM_EXCEPTION_LOGS
  is '存储过程异常日志记录表';
-- Add comments to the columns 
comment on column MMS_NM_EXCEPTION_LOGS.PROCEDURE_NAME
  is '发生异常的存储过程的名称';
comment on column MMS_NM_EXCEPTION_LOGS.EXCEPTION_TYPE
  is '发生的异常的名称';
comment on column MMS_NM_EXCEPTION_LOGS.OPERATION_TYPE
  is '1:insert,2:update,3:delete';
comment on column MMS_NM_EXCEPTION_LOGS.OCCUR_TIME
  is '异常发生时间';


--统一管理异常的存储过程

CREATE OR REPLACE PACKAGE SP_EXCEPTION_LOG_OPERATIONTYPE
Authid Current_User
--	创建异常操作的常量集合,对应字段:P_OPERATION_TYPE
AS
	C_SELECT CONSTANT NUMBER := 1;
	C_INSERT CONSTANT NUMBER := 2;
	C_UPDATE CONSTANT NUMBER := 3;
	C_DELETE CONSTANT NUMBER := 4;
	
END SP_EXCEPTION_LOG_OPERATIONTYPE;

--	创建异常入库的存储过程
CREATE OR REPLACE PROCEDURE SP_NM_EXCEPTION_LOG_INSERT(
	P_PROCEDURE_NAME IN MMS_NM_EXCEPTION_LOGS.PROCEDURE_NAME%TYPE,
	P_EXCEPTION_CODE IN NUMBER,
	P_OPERATION_TYPE IN MMS_NM_EXCEPTION_LOGS.OPERATION_TYPE%TYPE)
	Authid Current_User
--	异常日志添加存储过程
--	meachlyang
--	params: P_PROCEDURE_NAME:存储过程名称,P_EXCEPTION_CODE:异常代码,
--	P_OPERATION_TYPE:操作类型(1:select,2:insert,3:update,4:delete)
AS
	v_exception_type MMS_NM_EXCEPTION_LOGS.EXCEPTION_TYPE%TYPE;
BEGIN
  
--  保存回滚点
	SAVEPOINT DO_INSERT;
	v_exception_type := SQLERRM(P_EXCEPTION_CODE);
--  保存异常信息到异常记录表中
	INSERT INTO MMS_NM_EXCEPTION_LOGS 
	VALUES(EXCEPTION_LOG_SEQUENCE.NEXTVAL,P_PROCEDURE_NAME,
		v_exception_type,P_OPERATION_TYPE,sysdate);
    COMMIT;
EXCEPTION
	WHEN OTHERS THEN
--	此处异常不进行log记录,否则可能会出现死循环的现象
	ROLLBACK TO DO_INSERT;
  
END SP_NM_EXCEPTION_LOG_INSERT;
分享到:
评论

相关推荐

    Asp.net分页存储过程_Demo

    以下是一个简单的分页存储过程的创建步骤: 1. **创建存储过程**: 在SQL Server中,创建一个名为`usp_GetPagedData`的存储过程,接受两个输入参数:`@PageNumber`表示当前页数,`@PageSize`表示每页记录数。存储...

    C# WinForm 分页控件以及Demo演示(存储过程,有脚本)超级简单的,你值得拥有

    本文将详细介绍如何在C# WinForm应用中实现一个分页功能,并通过存储过程进行数据检索,同时提供相关的代码示例,帮助你快速上手。 一、分页控件的基本概念 分页控件允许用户以较小的数据集浏览大型数据集合,避免...

    web三层无存储过程分页Demo

    "web三层无存储过程分页Demo"是一个典型的示例,它展示了如何在不使用存储过程的情况下实现Web应用程序的分页功能。下面将详细解释这个Demo所涉及的关键知识点。 1. **三层架构**: - **表现层(Presentation ...

    存储过程分页实现实例源码

    存储过程分页实现实例源码 源码描述: ... * 写了一个分页的demo,跟大家分享一下,互相学习。 * 备注信息: 上传部分自己总结的常用方法的封装,有不足和不完美之处,希望大家指出来,愿意一起学习交流

    C#面向对象及存储过程实现分页的Demo

    1. 创建存储过程:在数据库中,编写一个接受页码和每页记录数作为输入参数的存储过程,返回指定页码的数据。 2. ADO.NET调用:在C#代码中,使用SqlConnection建立与数据库的连接,使用SqlCommand对象实例化存储过程...

    三层无存储过程分页Demo

    三层无存储过程分页Demo 修改web.config ;user id=sa;password=sa;initial catalog=Northwind;" providerName="System.Data.SqlClient"/&gt; Northwinddb是数据库连接名称 .数据库服务器名 这段程序原来是用...

    三层无存储过程分页Demo_dotnet整站程序.rar

    【标题】"三层无存储过程分页Demo_dotnet整站程序"是一个.NET平台下的Web应用程序示例,展示了如何在没有使用存储过程的情况下实现分页功能。这个Demo是针对三层架构设计的,通常包括表现层(Presentation Layer)、...

    ASP.NET源码——三层无存储过程分页Demo.zip

    在这个“ASP.NET源码——三层无存储过程分页Demo.zip”压缩包中,我们可以预见到一个使用ASP.NET技术实现的三层架构(Presentation Layer、Business Logic Layer、Data Access Layer)的无存储过程分页示例。...

    对大数据通用存储过程分页demo

    一个通用存储过程分页(特别是对大数据很好用),里面包含liq to sql 和sap.net 调用他的实例方法

    DataGridView 分页及Demo示例

    本示例“DataGridView 分页及Demo示例”就是关于如何在`DataGridView`中实现分页操作的一个实例教程。 首先,`DataGridView`控件本身并不内置分页功能,所以需要自定义实现。在提供的文件列表中,我们看到多个源...

    C# mvc4加存储过程加easyUI-DataGrid开发的数据分页Demo

    该项目主要使用到的知识点: ...1.继承 2.泛型 3.存储过程 4.反射 5.特性 6.Jquery Easy-UI DataGrid的使用 7.jquery 的ajax 示例数据库表和存储过程在MyMVC.WebUI\App_Data文件夹里。...分页方式为存储过程分页。

    ASP.NET-[其他类别]三层无存储过程分页Demo.zip

    总结来说,这个"ASP.NET-[其他类别]三层无存储过程分页Demo.zip"可能包含了一个完整的示例,演示如何在ASP.NET项目中实现基于三层架构的无存储过程分页功能。通过解压并研究其中的代码,开发者可以学习到如何组织...

    存储过程分页实例源码 1.0.rar

    Filename: ...* 写了一个分页的demo,跟大家分享一下,互相学习。 * 邮箱:[email protected] * 备注信息: 上传部分自己总结的常用方法的封装,有不足和不完美之处,希望大家指出来,愿意一起学习交流。

    简单ListView分页Demo

    本示例"简单ListView分页Demo"旨在教你如何实现一个具有分页功能的ListView,以展示不同类型的音乐,如流行音乐和古典音乐,并根据类型显示不同数量的条目。我们将探讨以下几个关键知识点: 1. **ListView基础**: ...

    DataGridView的分页显示Demo

    一个DataGridView的分页显示Demo。也是看见网络上很多人询问关于DataGridView如何做分页。根据我的认识,Visual Sutido 2005里的DataGridView控件是没有带分页属性的,因此咱们必须通过写代码去实现分页功能。 用...

    基于ASP的聊天室 三层无存储过程分页Demo.zip

    总结,"基于ASP的聊天室 三层无存储过程分页Demo.zip"是一个教学示例,展示了如何使用ASP技术构建一个具有分页功能的聊天室,通过三层架构实现业务逻辑与数据访问的分离,同时不依赖存储过程进行数据库操作。...

    [其他类别]三层无存储过程分页Demo_3layerpager.zip

    【标题】:“三层无存储过程分页Demo_3layerpager.zip”是一个压缩包,其中包含了一个基于三层架构的、不依赖存储过程实现分页功能的示例代码。三层架构是一种常见的软件设计模式,通常包括表现层(UI)、业务逻辑层...

    ajax动态分页的DEMO

    这个“ajax动态分页的DEMO”是一个实际应用Ajax技术的例子,它包含了一个JavaScript文件(ajax.js)、一个JSP页面(Ajax.jsp)、一个SQL数据库脚本(database.sql)以及一个通知页面(notice.htm)。下面我们将详细...

    C#两个分页demo

    在分页应用中,我们可以创建一个ViewModel来存储当前页数据和分页参数,然后利用Knockout的数据绑定机制更新视图。 ```javascript function PaginationViewModel() { this.currentPage = ko.observable(1); this....

Global site tag (gtag.js) - Google Analytics