当前位置:首页 » 存储配置 » mysql存储过程返回游标

mysql存储过程返回游标

发布时间: 2022-07-29 17:13:34

1. mysql存储过程中使用游标的实例

复制代码
代码如下:
DELIMITER
$$
DROP
PROCEDURE
IF
EXISTS
getUserInfo
$$
CREATE
PROCEDURE
getUserInfo(in
date_day
datetime)
--
--
实例
--
MYSQL存储过程名为:getUserInfo
--
参数为:date_day日期格式:2008-03-08
--

BEGIN
declare
_userName
varchar(12);
--
用户名
declare
_chinese
int
;
--
语文
declare
_math
int
;
--
数学
declare
done
int;
--
定义游标
DECLARE
rs_cursor
CURSOR
FOR
SELECT
username,chinese,math
from
userInfo
where
datediff(createDate,
date_day)=0;
DECLARE
CONTINUE
HANDLER
FOR
NOT
FOUND
SET
done=1;
--
获取昨天的日期
if
date_day
is
null
then

set
date_day
=
date_add(now(),interval
-1
day);
end
if;
open
rs_cursor;
cursor_loop:loop

FETCH
rs_cursor
into
_userName,
_chinese,
_math;
--
取数据

if
done=1
then

leave
cursor_loop;

end
if;
--
更新表
update
infoSum
set
total=_chinese+_math
where
UserName=_userName;
end
loop
cursor_loop;
close
rs_cursor;

END$$
DELIMITER
;

2. MYSQL存储过程的输出参数可以是游标吗

你是用ado连接数据库的吧,我在VC下也同样出现这样的问题,使用游标的时候获取不到输出值,且还会导致连接中断。估计是mysql存储过程还不够完善,在oracle使用就没有任何问题。 你可以用Mysql Api直接连接mysql,应该没有这样的问题.

3. mysql 是否支持怎样的游标参数

1) 如果仅仅想把数据传给MySQL存储过程,那就用in类型参数;2) 如果仅仅从MySQL存储过程返回值,那就用out类型参数;3) 如果需要把数据传给MySQL存储过程经过计算再传回给我们,那就用inout类型参数。

4. mysql 存储过程 游标什么亿is

存储过程和函数(存储在 mysql数据库中的 proc表,所以检查有没有这个表)
存储过程是一种存储程序(如正规语言里的子程序一样),mysql支持有两种:存储过程,在其他SQL语句中可以返回值的函数(使用起来和 mysql预装载的函数一样,如 pi())
一个存储过程包括名字,参数列表,以及可以包括很多SQL语句的SQL语句集。
as:(复合语句块)
CREATE PROCEDURE procere1 /*name存储过程名*/
(in parameter1 interger) /*parameters参数*/
BEGIN /*start of block 语句块头*/
DECLARE varialbe1 CHAR(10); /* variables 变量声明*/
IF parameter1 = 100 THEN /*start of IF if条件*/
SET variable1 = 'birds'; /*assignment 赋值*/
ELSE
SET variable1 = 'beasts'; /*assignment 赋值*/
END IF; /*end of if if结束*/
INSERT INTO table1 values(variable1); /*statement SQL语句*/
END;

5. MySql数据库的存储过程能返回游标么

不知道mysql这个跟oracle里面,是不是一致的,下面是我学习的时候总结的

如果一个过程要返回一个结果集,那么要引用游标来处理这个结果集。
create or replace procere Test
(
varEmpName emp.ename%type
)
As
begin ------会报错.错误原因没有into子句.
select * from emp where ename like '%'||varEmpName||'%';
end;

这个程序我们无法用into,因为在Oracle里面没有一个类型去接受一个结果集.这个时候我们可以声明游标对象去接受他.

有俩种方法:
一种是声明系统游标,一种是声明自定义游标,然后后面操作一样,参数类型为
in out 或out
(1)声明个人系统游标.(推荐)
create or replace p_temp_procere
(
cur_arg out sys_refcursor; --方法1
)
begin
open cur_arg for select * from tablename;
end
调用
declare
cur_calling sys_refcursor;
begin
p_temp_procere(cur_calling); --这样这个游标就有值了
for rec_next in cur_calling loop
....
end loop;
end;

(2)在包头中申明一个游表类型,然后调用者申明一个这个类型的游标变量,传给返回游标的存储过程 ,存储过程out这个结果集,这种方法很麻烦.游标类型不能像索引表一样使用create or replace type方法来创建,所以只能在包中申明,并且需要使用/来执行,后面的存储过程才认这个游标类型.(不推荐,但是建议要知道并且要会这种方式,毕竟它有它存在的道理)
--定义全局变量
create or replace package pkg_package
as
type type_cursor is ref cursor;
type type_record is record
(
test01 varchar2(32),
test02 varchar2(32),
test03 varchar2(32)
);
end;
/
--创建返回游标的存储过程
create or replace procere p_temp_procere
(
cur_out_arg out pkg_package.type_cursor
)
is
begin
open cur_out_arg for select * from test;
end;
/
--调用
declare
cur_out_arg pkg_package.type_cursor;
rec_arg pkg_package.type_record;
begin
p_temp_procere(cur_out_arg);
fetch cur_out_arg into rec_arg;
dbms_output.put_line(rec_arg.test01);
dbms_output.put_line(rec_arg.test02);
dbms_output.put_line(rec_arg.test03);
end;

6. 于mysql不能返回游标,那么使用mybatis框架在取

mysql存储过程是这样的
create procere sp_get_user_count
(
out v_count int
)
begin
select count(1) into v_count from t_user;
select * from t_dept;
select * from t_class;
end;
由于mysql不能返回游标,那么使用mybatis框架在取的时候应该怎么取呢?怎样确定取出来的是t_dept的还是t_class?
<!--这段应改怎么写啊?-->
<select id="selectAll" >
call sp_get_user_count()
</select>

7. mysql 存储过程 怎么跳出游标 循环

游标一般与循环一起使用,可以设置一个循环结束条件来跳出循环并关闭游标。

8. MYSQL如何把存储过程所返回的结果集插入到表

从存储过程返回表类型的值也有二种:
1.存储过程使用浮标参数,即同时指定CURSOR VARYING OUTPUT项.调用者可以使用while及fetch循环遍历该浮标.
2.直接将存储过程返回的结果集插入到表中,即使用insert into 表名 exec 存储过程.此种方式中注意存储过程返回的结果集列与insert的列要完全对应,可以在insert中指定列名来保证对应关系.
------------------------------------------------------------------------------测试:------------------------------------------------------------------------------
----建立测试用的临时表
create table #tmp (colx int,coly int)
insert into #tmp values(1,2)
insert into #tmp values(2,3)
insert into #tmp values(3,4)
select * from #tmpGO----创建返回游标的存储过程
create proc sp_c @cur CURSOR VARYING OUTPUTASbeginset @cur = CURSOR for select colx from #tmp
open @cur /*该过程返回游标,该游标为colx列的查询结果*/endGO----创建返回表的存储过程
create proc sp_dasselect coly from #tmp /*该过程返回coly列的查询结果*/go----创建用于调用以上二个存储过程的存储过程
create proc sp_easbegindeclare @x int
declare @cur cursor
----接收游标,并遍历游标
EXEC sp_c @cur OUTPUT
fetch next from @cur into @x
while (@@FETCH_STATUS = 0)beginprint @xfetch next from @cur into @xENDclose @curdeallocate @cur
----将存储过程返回的列值再重新插入源表中

9. mysql存储过程中能返回游标吗

MySQL中可以返回一个记录集 , 比如直接 select * from test_table; ,你在程序中直接调这个存储过程,存储过程会返回这些记录集到你的客户端应用程序中。
但无法返回游标。

热点内容
光遇安卓音韵季有什么 发布:2024-10-06 05:06:51 浏览:76
apk脚本破解 发布:2024-10-06 04:33:23 浏览:51
数模编程 发布:2024-10-06 04:04:43 浏览:16
雷霆一击服务器搭建 发布:2024-10-06 03:58:14 浏览:500
导演脚本 发布:2024-10-06 03:37:34 浏览:566
施耐德有密码程序如何打开 发布:2024-10-06 03:37:00 浏览:893
解压缩文件修复 发布:2024-10-06 03:31:17 浏览:705
如何设置休眠时不需要开机密码 发布:2024-10-06 03:03:25 浏览:233
密码工作三个事关的内容是什么 发布:2024-10-06 02:39:44 浏览:426
21款昂科威哪个配置好 发布:2024-10-06 02:20:39 浏览:839