--定义一个包和游标用于查询使用
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;
分享到:
相关推荐
以下是一个简单的分页存储过程的创建步骤: 1. **创建存储过程**: 在SQL Server中,创建一个名为`usp_GetPagedData`的存储过程,接受两个输入参数:`@PageNumber`表示当前页数,`@PageSize`表示每页记录数。存储...
本文将详细介绍如何在C# WinForm应用中实现一个分页功能,并通过存储过程进行数据检索,同时提供相关的代码示例,帮助你快速上手。 一、分页控件的基本概念 分页控件允许用户以较小的数据集浏览大型数据集合,避免...
"web三层无存储过程分页Demo"是一个典型的示例,它展示了如何在不使用存储过程的情况下实现Web应用程序的分页功能。下面将详细解释这个Demo所涉及的关键知识点。 1. **三层架构**: - **表现层(Presentation ...
存储过程分页实现实例源码 源码描述: ... * 写了一个分页的demo,跟大家分享一下,互相学习。 * 备注信息: 上传部分自己总结的常用方法的封装,有不足和不完美之处,希望大家指出来,愿意一起学习交流
1. 创建存储过程:在数据库中,编写一个接受页码和每页记录数作为输入参数的存储过程,返回指定页码的数据。 2. ADO.NET调用:在C#代码中,使用SqlConnection建立与数据库的连接,使用SqlCommand对象实例化存储过程...
三层无存储过程分页Demo 修改web.config ;user id=sa;password=sa;initial catalog=Northwind;" providerName="System.Data.SqlClient"/> Northwinddb是数据库连接名称 .数据库服务器名 这段程序原来是用...
【标题】"三层无存储过程分页Demo_dotnet整站程序"是一个.NET平台下的Web应用程序示例,展示了如何在没有使用存储过程的情况下实现分页功能。这个Demo是针对三层架构设计的,通常包括表现层(Presentation Layer)、...
在这个“ASP.NET源码——三层无存储过程分页Demo.zip”压缩包中,我们可以预见到一个使用ASP.NET技术实现的三层架构(Presentation Layer、Business Logic Layer、Data Access Layer)的无存储过程分页示例。...
一个通用存储过程分页(特别是对大数据很好用),里面包含liq to sql 和sap.net 调用他的实例方法
本示例“DataGridView 分页及Demo示例”就是关于如何在`DataGridView`中实现分页操作的一个实例教程。 首先,`DataGridView`控件本身并不内置分页功能,所以需要自定义实现。在提供的文件列表中,我们看到多个源...
该项目主要使用到的知识点: ...1.继承 2.泛型 3.存储过程 4.反射 5.特性 6.Jquery Easy-UI DataGrid的使用 7.jquery 的ajax 示例数据库表和存储过程在MyMVC.WebUI\App_Data文件夹里。...分页方式为存储过程分页。
总结来说,这个"ASP.NET-[其他类别]三层无存储过程分页Demo.zip"可能包含了一个完整的示例,演示如何在ASP.NET项目中实现基于三层架构的无存储过程分页功能。通过解压并研究其中的代码,开发者可以学习到如何组织...
Filename: ...* 写了一个分页的demo,跟大家分享一下,互相学习。 * 邮箱:[email protected] * 备注信息: 上传部分自己总结的常用方法的封装,有不足和不完美之处,希望大家指出来,愿意一起学习交流。
本示例"简单ListView分页Demo"旨在教你如何实现一个具有分页功能的ListView,以展示不同类型的音乐,如流行音乐和古典音乐,并根据类型显示不同数量的条目。我们将探讨以下几个关键知识点: 1. **ListView基础**: ...
一个DataGridView的分页显示Demo。也是看见网络上很多人询问关于DataGridView如何做分页。根据我的认识,Visual Sutido 2005里的DataGridView控件是没有带分页属性的,因此咱们必须通过写代码去实现分页功能。 用...
总结,"基于ASP的聊天室 三层无存储过程分页Demo.zip"是一个教学示例,展示了如何使用ASP技术构建一个具有分页功能的聊天室,通过三层架构实现业务逻辑与数据访问的分离,同时不依赖存储过程进行数据库操作。...
【标题】:“三层无存储过程分页Demo_3layerpager.zip”是一个压缩包,其中包含了一个基于三层架构的、不依赖存储过程实现分页功能的示例代码。三层架构是一种常见的软件设计模式,通常包括表现层(UI)、业务逻辑层...
这个“ajax动态分页的DEMO”是一个实际应用Ajax技术的例子,它包含了一个JavaScript文件(ajax.js)、一个JSP页面(Ajax.jsp)、一个SQL数据库脚本(database.sql)以及一个通知页面(notice.htm)。下面我们将详细...
在分页应用中,我们可以创建一个ViewModel来存储当前页数据和分页参数,然后利用Knockout的数据绑定机制更新视图。 ```javascript function PaginationViewModel() { this.currentPage = ko.observable(1); this....