游标返回的存储过程
❶ 关于存储过程返回游标的处理
对游标进行遍历,获得游标中的数据,存放到结果集中,
呵呵,希望能有帮助,^_^
❷ 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)的时候进行检查的