首頁 資料庫 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脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1653
14
CakePHP 教程
1413
52
Laravel 教程
1306
25
PHP教程
1251
29
C# 教程
1224
24
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_letest

不用数据库来实现用户的简单的下载,代码如下,但是却不能下载,请高手找下原因,文件路劲什么的没有关问题 不用数据库来实现用户的简单的下载,代码如下,但是却不能下载,请高手找下原因,文件路劲什么的没有关问题 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'

图片消失怎么解决 图片消失怎么解决 Jun 13, 2016 am 10:09 AM

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

See all articles