首页 数据库 mysql教程 创建 Oracle 分页存储过程

创建 Oracle 分页存储过程

Jun 07, 2016 pm 05:46 PM
cursor quot varchar

1.创建Oracle包的定义。使用 REF CURSOR 数据类型来处理 Oracle 结果集。REF CURSOR 是一个指向 PL/SQL 查询所返回的结果集的指针。与普通的游标不同,REF CURSOR 是一个变量,它是对游标的引用

1.创建Oracle包的定义。使用 REF CURSOR 数据类型来处理 Oracle 结果集。REF CURSOR 是一个指向 PL/SQL 查询所返回的结果集的指针。与普通的游标不同,REF CURSOR 是一个变量,它是对游标的引用

1.创建Oracle包的定义。使用 REF CURSOR 数据类型来处理 Oracle 结果集。REF CURSOR 是一个指向 PL/SQL 查询所返回的结果集的指针。与普通的游标不同,REF CURSOR 是一个变量,它是对游标的引用,可以在执行时将其设置为指向不同的结果集。使用 REF CURSOR 输出参数可以将 Oracle 结构化程序的结果集传递回调用应用程序。通过在调用应用程序中定义 OracleType.Cursor 数据类型的输出参数,可以访问 REF CURSOR 所指向的结果集。

<span><blockquote>
<pre class="brush:php;toolbar:false"><span>create or replace package MF_PAK_001 is<br>  type t_cursor is ref cursor;<br>  procedure GetDataByPage(<br>     p_tableName varchar2,<br>     p_fields varchar2,<br>     p_filter varchar2,<br>     p_sort varchar2,<br>     p_curPage number,<br>     p_pageSize number,<br>     p_cursor out t_cursor,<br>     p_totalRecords out number         <br> );<br>end MF_PAK_001;</span>
登录后复制
2.创建包体。在包体中实现具体的存储过程。

<span><blockquote><span>create or replace package body MF_PAK_001 is<br>procedure GetDataByPage(<br>p_tableName varchar2,--要查询的表名<br>p_fields varchar2,--要查询的字段<br>p_filter varchar2,--过滤条件<br>p_sort varchar2,--排序字段及方向<br>p_curPage number,<br>p_pageSize number,<br>p_cursor out t_cursor,<br>p_totalRecords out number <br>)<br>is<br>v_sql varchar2(1000):='';<br>v_startRecord number(4);<br>v_endRecord number(4);<br>begin<br></span></blockquote>--获取总的记录数<br> <blockquote><span>v_sql:=' to_number(count(*)) from '||p_tableName;<br>if p_filter is not null then<br>v_sql:=v_sql||' where 1=1 and '||p_filter;<br>end if;<br>execute immediate v_sql into p_totalRecords;<br><br>v_startRecord:=(p_curPage-1)*p_pageSize;<br>v_endRecord:=p_curPage*p_pageSize;<br><br>v_sql:='select '||p_fields||' from (select '||p_fields||',rownum r from '||<br>'(select '||p_fields||' from '||p_tableName;<br>if p_filter is not null then<br>v_sql:=v_sql||' where 1=1 and '||p_filter;<br>end if;<br>if p_sort is not null then<br>v_sql:=v_sql||' order by '||p_sort;<br>end if;<br>v_sql:=v_sql||') A where rownum='||to_char(v_startRecord);<br>open p_cursor for v_sql;<br><br>end GetDataByPage; <br>end MF_PAK_001;</span></blockquote></span>3.在Oracle中编写查询语句,执行包体中的分页存储过程,看是否能够正确执行。
登录后复制

<span><blockquote>
<p></p>
<pre class="brush:php;toolbar:false"><span>declare<br>v_cur MF_PAK_001.t_cursor;<br>v_job jobs%rowtype;<br>v_totalRecords number;<br>begin<br>  MF_PAK_001.GetDataByPage('jobs','job_id,job_title,min_salary,max_salary','min_salary>0','job_id asc',</span>
登录后复制
<span>  1,10,v_cur,v_totalRecords);<br>  fetch v_cur into v_job;<br>  while v_cur%found loop<br>    dbms_output.put_line(v_job.job_id||','||v_job.job_title);<br>    fetch v_cur into v_job;<br>  end loop;<br>  dbms_output.put_line('总记录数为:'||v_totalRecords);<br>end;</span>
登录后复制
4.在.NET中调用该分页存储过程。

<span><blockquote>
<pre class="brush:php;toolbar:false"><span>string connString = "Data Source=ORCL;User Id=hr;Password=Pwd123456";<br>OracleConnection conn = new OracleConnection(connString);<br><br>OracleCommand cmd = new OracleCommand();<br>cmd.Connection = conn;<br>cmd.CommandText = "MF_PAK_001.GetDataByPage";<br>cmd.CommandType = CommandType.StoredProcedure;<br><br>cmd.Parameters.Add("p_tableName", OracleType.VarChar).Value = "jobs";<br>cmd.Parameters.Add("p_fields", OracleType.VarChar).Value = "job_id,job_title,min_salary,max_salary";<br>cmd.Parameters.Add("p_filter", OracleType.VarChar).Value = "";<br>cmd.Parameters.Add("p_sort", OracleType.VarChar).Value = "job_id asc";<br>cmd.Parameters.Add("p_curPage", OracleType.Number).Value = 1;<br>cmd.Parameters.Add("p_pageSize", OracleType.Number).Value = 10;<br>cmd.Parameters.Add("p_cursor", OracleType.Cursor).Direction =ParameterDirection.Output;<br>cmd.Parameters.Add("p_totalRecords", OracleType.Number).Direction = ParameterDirection.Output;<br><br>conn.Open();<br>OracleDataReader dr = cmd.ExecuteReader();<br><br>while (dr.Read())<br>{<br>    for (int i = 0; i         Response.Write(dr[i].ToString() + ";");<br>    Response.Write("<br>");<br>}<br>conn.Close();</span>
登录后复制
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解锁Myrise中的所有内容
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

php提交表单通过后,弹出的对话框怎样在当前页弹出,该如何解决 php提交表单通过后,弹出的对话框怎样在当前页弹出,该如何解决 Jun 13, 2016 am 10:23 AM

php提交表单通过后,弹出的对话框怎样在当前页弹出php提交表单通过后,弹出的对话框怎样在当前页弹出而不是在空白页弹出?想实现这样的效果:而不是空白页弹出:------解决方案--------------------如果你的验证用PHP在后端,那么就用Ajax;仅供参考:HTML code

mysql中varchar类型如何实现日期进行比较、排序等操作 mysql中varchar类型如何实现日期进行比较、排序等操作 May 31, 2023 pm 01:49 PM

在mysql使用过程中,日期一般都是以datetime、timestamp等格式进行存储的,但有时会因为特殊的需求或历史原因,日期的存储格式是varchar,那么我们该如何处理这个varchar格式的日期数据呢?使用函数:STR_TO_DATE(str,format)STR_TO_DATE(str,format)函数是DATE_FORMAT()函数的反函数。它需要一个字符串str和一个格式字符串格式。STR_TO_DATE()返回一个DATETIME值,如果格式字符串包含日期和时间部分,或如果字

mysql中char和varchar有什么区别 mysql中char和varchar有什么区别 Sep 04, 2023 pm 02:16 PM

mysql中char和varchar的区别有:1、CHAR是固定长度的,而VARCHAR是可变长度的;2、CHAR存储和检索效率高,而VARCHAR存储和检索效率不高;3、CHAR占用存储空间,而VARCHAR可以节省存储空间。

CSS 辅助样式属性解析:cursor 和 pointer-events CSS 辅助样式属性解析:cursor 和 pointer-events Oct 20, 2023 am 11:21 AM

CSS辅助样式属性解析:cursor和pointer-events在网站开发中,经常会遇到一些特殊的需求,需要通过一些辅助样式属性来实现。cursor和pointer-events是两个常用的样式属性,它们可以在用户与页面交互时提供更好的反馈和控制。本文将详细解析这两个属性,并提供具体的代码示例。一、cursor属性cursor属性用于定义鼠

MySQL怎么确定VARCHAR的大小 MySQL怎么确定VARCHAR的大小 May 27, 2023 pm 09:20 PM

首先不建议使用TEXT类型的,因为使用TEXT会严重影响效率,最好的方式就是使用VARCHAR并确定字段的最大长度。我们可以先在表里定义一个字段rule_value,并设置长度为255,然后输入最小的json字符串进去:使用MySQL的CHAR_LENGTH函数,计算rule_value的大小:SELECTid,rule_type,rule_value,CHAR_LENGTH(rule_value)asrule_value_length,rule_markFROMtest_tableWHEREr

不用数据库来实现用户的简单的下载,代码如下,但是却不能下载,请高手找下原因,文件路劲什么的没有关问题 不用数据库来实现用户的简单的下载,代码如下,但是却不能下载,请高手找下原因,文件路劲什么的没有关问题 Jun 13, 2016 am 10:15 AM

不用数据库来实现用户的简单的下载,代码如下,但是却不能下载,请高手找下原因,文件路劲什么的没问题。

图片消失怎么解决 图片消失怎么解决 Apr 07, 2024 pm 03:02 PM

图片消失如何解决先是图片文件上传$file=$_FILES['userfile'];  if(is_uploaded_file($file['tmp_name'])){$query=mysql_query("INSERT INTO gdb_banner(image_src ) VALUES ('images/{$file['name'

为什么小弟我在php上写的这个代码,在浏览器上什么都不显示 为什么小弟我在php上写的这个代码,在浏览器上什么都不显示 Jun 13, 2016 am 10:24 AM

为什么我在php上写的这个代码,在浏览器上什么都不显示啊

See all articles