当前位置:首页 » 存储配置 » 存储过程调用游标

存储过程调用游标

发布时间: 2023-07-10 10:12:36

A. 6、什么是存储过程什么是游标,何时使用、何时不用游标

存储过程是一组命名了的sql语句集合,是为了完成特定功能汇集而成的。该集合编译后存放在数据库中,可根据实际情况重新编译,可直接运行,也可远程运行且存储过程直接在服务器端运行。

游标实际上是一种能从包括多条数据记录的结果集(结果集是select查询之后返回的所有行数据的集合)中每次提取一条记录的机制充当指针的作用,遍历结果中的所有行,但他一次只指向一行。

游标在循环处理字段的时候使用

建议:尽量避免使用游标,因为游标的效率较差,如果游标操作的数据超过1万行,那么就应该考虑改写;使用基于游标的方法或临时表方法之前,应先寻找基于集的解决方案来解决问题,基于集的方法通常更有效;与临时表一样,游标并不是不可使用。

B. java调用的存储过程,能否传入游标参数

java调用的存储过程,不能传入游标参数,但是存储过程调用的内部存储过程,可以存入游标参数。未完待续

C. ORACLE存储过程中游标作为输出参数调用时怎么报错

你的意思是不是要获取到“当前用户:user_id”这个的内容,如果是,两个方式可以解决:
1.通过存储过程的出参,将“当前用户:user_id”连接串返回;
比如:
假设你的过程叫,prc_test,在参数列表中增加出参。
create or replace procere prc_test(入参 in 类型, 出参 out 类型) is
begin
-- 逻辑实现
end;
出参就是你要把内容放进去,用来传值的变量。
2.在过程中保存一张临时表,然后在java中查出这个临时表中保存的数据。
定义临时表table_temp
在过程中
insert into table_temp(msg) values ('当前用户:' || user_id);

D. Oracle调用存储过程输出的游标问题

不知道你那里。

是不是可以把那个 存储过程 (参数是游标)的。

修改为 函数, 返回游标。


如果可以修改的话, 那么你参考一下 下面这个例子代码

--测试表数据。
select*fromtest_main;

IDVALUE
------------------------------
1ONE
3THREE
2TWO
--返回结果集的函数.
CREATEORREPLACEFUNCTIONGet_Test_Main_All
RETURNSYS_REFCURSOR
IS
return_cursorSYS_REFCURSOR;
BEGIN
OPENreturn_cursorFOR'SELECT*FROMtest_main';
RETURNreturn_cursor;
END;
/



--普通的查询,来查看结果.
SELECTGet_Test_Main_All()FROMal;

GET_TEST_MAIN_ALL()
--------------------
CURSORSTATEMENT:1

CURSORSTATEMENT:1

IDVALUE
------------------------------
1ONE
3THREE
2TWO


--存储过程调用,来获取结果.
DECLARE
--调用函数的返回值.
testCursorSYS_REFCURSOR;
--存储单行数据.
testRectest_main%ROWTYPE;
BEGIN
--调用返回结果集的函数.
testCursor:=Get_Test_Main_All();
--循环,遍历结果.
LOOP
--游标向前.
FETCHtestCursorINTOtestRec;
--无数据的情况下,退出循环.
EXITWHENtestCursor%NOTFOUND;
--输出调试信息.
dbms_output.put_line(TO_CHAR(testRec.id)||''||testRec.value);
ENDLOOP;
END;
/

1ONE
3THREE
2TWO

PL/SQL过程已成功完成。

E. MySQL 存储过程,获取使用游标查询的结果集

MySQL 存储过程中,使用游标查询,返回的是结果集时,如何查看调用存储过程输出结果呢?
解决方案:存储过程不返回数据,但它能创建和填充另一个表。所以在存储过程运行中创建临时表。该临时表将保存存储过程中生成的结果集,在遍历游标时,用insert保存每条数据到临时表中。后续调用时可以用select语句查询临时表中的存储过程运行结果。

以下有 三种方式 使用游标创建一个存储过程,统计某一部门下的员工信息

方法一:Loop循环

调用存储过程:

方法二:While 循环

调用存储过程:

方法三:REPEAT 循环

调用存储过程:

上述三种实现方法在测试过程中遇到下述问题。
调用存储过程查询临时表输出结果时,会发现多循环了一次,像这样:

解决方法:
在遍历游标查询结果时,先判断游标的结束标志(done) 是否是为1,如果不是1,则向临时表中插入数据。

F. 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
}

G. 如何调用一个Oracle存储过程返回一个或多个REF游标,使用ADO从C

代码如下:
CREATE OR REPLACE PROCEDURE P_TESTB
AS

VARCURSOR SYS_REFCURSOR;
R USERS%ROWTYPE;
BEGIN

P_TESTA(VARCURSOR);
LOOP
FETCH VARCURSOR INTO R;
EXIT WHEN
VARCURSOR%NOTFOUND;
DBMS_OUTPUT.PUT_LINE(R.NAME);
END LOOP;
END
P_TESTB;

热点内容
副编译 发布:2025-02-04 02:05:25 浏览:612
解压按摩师 发布:2025-02-04 01:21:31 浏览:424
linuxssh限制 发布:2025-02-04 01:20:40 浏览:697
脚本式是什么 发布:2025-02-04 01:06:24 浏览:248
手机wps密码怎么取消密码 发布:2025-02-04 00:51:44 浏览:596
算法逻辑表 发布:2025-02-04 00:51:44 浏览:241
零售股票如何配置主线 发布:2025-02-04 00:51:07 浏览:948
预算法施行时间是 发布:2025-02-04 00:50:30 浏览:342
世界ol上传照片 发布:2025-02-04 00:34:13 浏览:62
有初始化的数组编译提示重复定义 发布:2025-02-04 00:33:21 浏览:584