游標返回的存儲過程
❶ 關於存儲過程返回遊標的處理
對游標進行遍歷,獲得游標中的數據,存放到結果集中,
呵呵,希望能有幫助,^_^
❷ Mysql 存儲過程,獲取使用游標查詢的結果集
MySQL 存儲過程中,使用游標查詢,返回的是結果集時,如何查看調用存儲過程輸出結果呢?
解決方案:存儲過程不返回數據,但它能創建和填充另一個表。所以在存儲過程運行中創建臨時表。該臨時表將保存存儲過程中生成的結果集,在遍歷游標時,用insert保存每條數據到臨時表中。後續調用時可以用select語句查詢臨時表中的存儲過程運行結果。
以下有 三種方式 使用游標創建一個存儲過程,統計某一部門下的員工信息
方法一:Loop循環
調用存儲過程:
方法二:While 循環
調用存儲過程:
方法三:REPEAT 循環
調用存儲過程:
上述三種實現方法在測試過程中遇到下述問題。
調用存儲過程查詢臨時表輸出結果時,會發現多循環了一次,像這樣:
解決方法:
在遍歷游標查詢結果時,先判斷游標的結束標志(done) 是否是為1,如果不是1,則向臨時表中插入數據。
❸ 在oracle資料庫中,使用游標返回一個結果集的,用存儲過程實現
create or replace procere OutCursor(op_Result out SAnalysis.Ref_Cursor) as
begin
Open op_Result for
select *
from 表名
where 條件語句
order by 排序
end;
❹ 如何在Java中調用一個返回遊標的存儲過程
import oracle.jdbc.*;
...
CallableStatement cstmt;
ResultSet cursor;
// Use a PL/SQL block to open the cursor
//Additional Oracle Type Extensions
cstmt = conn.prepareCall
("begin open ? for select ename from emp; end;";
cstmt.registerOutParameter(1, OracleTypes.CURSOR);
cstmt.execute();
cursor = ((OracleCallableStatement)cstmt).getCursor(1);
// Use the cursor like a normal ResultSet
while (cursor.next ())
{System.out.println (cursor.getString(1));}
❺ 關於存儲過程返回遊標的錯誤
光有包頭,沒有包體,包裡面有個游標,但是游戲只是聲明了一個類型,也有在包體裡面實現這個游標,在FILTER_DATA_PROCEDURE這個過程裡面打開了游標,也沒有關閉.建議你去學習了包的寫法,游標的使用方法在來好好看看你自己寫的
❻ c#中如何調用一個返回遊標的存儲過程
下面是我以前用的,應該還有好方法,只是我用了這一種。
這個為oracle的,其他的應該類似,把oracleClient這個東西換換,就可以看見說明了。
存儲過程名:ProGetBookList
參數:s_Barcode(varchar),ResultCursor(游標)
-----
System.Data.OracleClient.OracleCommand Com = new System.Data.OracleClient.OracleCommand("ProGetBookList", connORCL );
Com.CommandType = CommandType.StoredProcere;
//創建存儲過程參數
OracleParameter pBarcode=new OracleParameter("s_Barcode",OracleType.VarChar,50);
OracleParameter pCursor=new OracleParameter("ResultCursor",OracleType.Cursor,50);
//設置輸出參數
pCursor.Direction=System.Data.ParameterDirection.Output;
//給輸入參數賦值
pBarcode.Value=s_Barcode;
//添加參數
Com.Parameters.Add(pBarcode);
Com.Parameters.Add(pCursor);
//執行存儲過程
Com.ExecuteNonQuery();
//為cousor類型返回參數創建讀取器
OracleDataReader dr=(OracleDataReader)pCursor.Value;
string[] errorString;
//從讀取器里將數據集得值取出,添加到集合(字元串類型)
System.Collections.ArrayList al_BookList=new ArrayList();
while (dr.Read()) //循環讀取,從第一行開始,直到返回假結束
{
errorString=new string[16];
errorString[1]=dr.GetString(0).Trim(); //讀第一個欄位,取字元類型
//dr.GetBoolean(0); //bool類型
//dr.GetData(0); //日期類型
//其他的自己用查看OracleDataReader
}
❼ 如何在oracle存儲過程中返回遊標
1:首先你需要創建一個包,並定義你返回的游標的類型、存儲過程 create or replace package TEST_PKG is -- Public type declarations type cur_emp is REF CURSOR; procere test_proc (v_empno in number, emps out cur_emp); end TEST_PKG; 2:然後你再創建包體 create or replace package body TEST_PKG is procere test_proc (v_empno in number, emps out cur_emp)asbeginopen emps for select * from emp where empno=7369; end test_proc; end TEST_PKG ; 3,通過JAVA調用 cstmt = conn.prepareCall("{call TEST_PKG .test_proc (?)}"); cstmt.registerOutParameter(1, OracleTypes.CURSOR); cstmt.execute();//獲得結果集
❽ c#中怎麼調用一個返回遊標的存儲過程
SqlConnection sqlconn=new SqlConnection("server=.;uid=sa;pwd=;database=Test");
sqlconn.Open();
SqlCommand sqlcmd=new SqlCommand();
sqlcmd.Connection=sqlconn;
sqlcmd.CommandText="dt_Inf";//指定存儲過程名
sqlcmd.CommandType=CommandType.StoredProcere;
SqlDataReader reader=sqlcmd.ExecuteReader();
while(reader.Read())
{
listBox1.Items.Add( reader[0].ToString()+"|"+reader[1].ToString());
}
sqlconn.Close();
❾ Perl 如何處理 返回多個游標的DB2存儲過程
一個游標(cursor)可以被看作指向結果集(a set of rows)中一行的指針(pointer)。游標每個時間點只能指向一行,但是可以根據需要指向結果集中其他的行。
例如:SELECT * FROM employees WHERE sex='M'會返回所有性別為男的雇員,在初始的時候,游標被放置在結果集中第一行的前面。使游標指向第一行,要執行FETCH。當游標指向結果集中一行的時候,可以對這行數據進行加工處理,要想得到下一行數據,要繼續執行FETCH。FETCH操作可以重復執行,直到完成結果集中的所有行
在存儲過程中使用游標,有如下幾個步驟:
聲明游標、打開游標、根據需要一次一行,講游標指向的數據取到本地變數(local variables)中、結束時關閉游標
聲明游標:
>>-DECLARE--cursor-name--CURSOR----+------------+--------->
'-WITH HOLD--'
>-----+--------------------------------+--------------------->
| .-TO CALLER--. |
'-WITH RETURN--+------------+--'
'-TO CLIENT--'
>----FOR--+-select-statement-+----------------------------><
'-statement-name---'
WITH RETURN子句用於將游標所定義的結果集傳遞給另一個存儲過程或者應用(an application)
如果select語句中包含CURRENT DATE, CURRENT TIME和CURRENT TIMESTAMP,所有的FETCH語句都會返回相同的日期、時間、時間戳值,因為這些特定寄存器是在打開游標(OPEN CURSOR)的時候進行檢查的