Oracle 存储过程教程
2019-01-03
编程之家
https://www.jb51.cc
编程之家收集整理的这篇文章主要介绍了Oracle 存储过程教程,编程之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
Oracle分页存储过程的思路于sqlserver的思路是一样的,但是我这里做了点改动,在因为Oracle的语法和规则的不同所以,Oracle分页存储过程看上去有点不一样。见笑,见笑!
在Oracle的存储过程中返回记录集,需要用到游标变量,Oracle不能像sqlserver那样可以直接返回一个记录集。
由于设想在.net中把复杂的sql语句生成,所以在存储过程中没有去考虑生成sql语句的问题。
以下是在Oracle中实现的分页存储过程。
create or replace package DotNet is
-- Created : 2004-12-13 13:30:30
TYPE type_cur IS REF CURSOR; --定义游标变量用于返回记录集
Psql in varchar2,--产生dataset的sql语句
v_cur out type_cur --返回当前页数据记录
procedure DotNetPageRecordsCount(
Psqlcount in varchar2,--产生dataset的sql语句
create or replace package body DotNet is
------------------------------------------------------------取分页总数
v_sql := 'select count() from (' || Psql || ')';
execute immediate v_sql into v_count;
Pcount := ceil(v_count/Psize);
------------------------------------------------------------显示任意页内容
v_Phei := Pindex Psize + Psize;
--Psql := 'select rownum rn,t. from cdssxl t' ; --要求必须包含rownum字段
vsql := 'select * from (' || Psql || ') where rn between ' || v_Plow || ' and ' || v_Phei ;
procedure DotNetPageRecordsCount(
vsql := 'select count(*) from (' || Psqlcount || ')';
execute immediate v_sql into v_prcount;
Prcount := v_prcount; --返回记录总数
在.net调用返回记录集的存储过程,需要用到datareader,但是datareader不支持在datagrid中的分页,因此需要利用datagrid自定义分页功能。