mysql存储过程返回查询结果集,菜鸟提问:mysql 存储过程返回数据集怎么写
mysql存储过程返回查询结果集,菜鸟提问:mysql 存储过程返回数据集怎么写详细介绍
本文目录一览: mybatis调用mysql存储过程(返回参数,单结果集,多结果集)
mybatis调用mysql存储过程(返回参数,单结果集,多结果集)
注: RETCODE、RETDESC 这里的输出值不用在函数里 SELECT RETCODE; ,因为即使没有,当执行成功后会自动返回在对象里(Object/Map),所以在函数里不用SELECT一下了。
Navicat中执行函数需要输入参数值,也是对应图1,@A@B表示输出值。(一个输入值两个输出值)
1. 标注一二三四五处如果存在,则执行成功后返回结果如下
标注一对应结果1 标注二对应结果2 标注三对应结果3 标注四对应结果4 标注五对应结果5 其中结果3返回的是集合。 存在这么多结果,想要取结果3中的集合是不好取的,只有像下图一样只有一个结果才好取出集合。
2. 标注一二四五处如果不存在,则执行成功后返回结果如下
只有结果1,对应的是标注三处的值。可以取出集合
函数p_duplicate_enroll
mysql存储过程如何获取多个结果集
mysql多个结果集存储过程 带参数 我想用mysql存储过程获取外键数据,然后通过out输出来。结果发现就能获取一条记录,不知道怎么去获取多条。麻烦各位帮忙看下。存储过程代码:CREATE PROCEDURE empCusState( in riqi date,out rname varchar(2000),out cname varchar(2000),out tname varchar(2000)) begindeclare sql_text varchar(5000);set sql_text = concat('select t.t_Name , r.r_Name , c.c_Name into @sql_tname, @sql_rname,@sql_cname from ((roomcourse rc inner join teacher t on rc.t_Id=t.t_Id ) inner join room r on rc.r_Id=r.r_Id) inner join course c on rc.c_Id=c.c_Id where rc.rc_dates=\'',riqi,'\'');set @sql_text = sql_text;prepare stmt from @sql_text;execute stmt;set rname = @sql_rname;set cname = @sql_cname;set tname = @sql_tname;end执行代码:call empCusState('2014-03-03',@a,@b,@c);select @a,@b,@c;
MySQL 存储过程,获取使用游标查询的结果集
MySQL 存储过程中,使用游标查询,返回的是结果集时,如何查看调用存储过程输出结果呢?
解决方案:存储过程不返回数据,但它能创建和填充另一个表。所以在存储过程运行中创建临时表。该临时表将保存存储过程中生成的结果集,在遍历游标时,用insert保存每条数据到临时表中。后续调用时可以用select语句查询临时表中的存储过程运行结果。
以下有 三种方式 使用游标创建一个存储过程,统计某一部门下的员工信息
方法一:Loop循环
调用存储过程:
方法二:While 循环
调用存储过程:
方法三:REPEAT 循环
调用存储过程:
上述三种实现方法在测试过程中遇到下述问题。
调用存储过程查询临时表输出结果时,会发现多循环了一次,像这样:
解决方法:
在遍历游标查询结果时,先判断游标的结束标志(done) 是否是为1,如果不是1,则向临时表中插入数据。
MYSQL 存储过程能返回结果集吗
可以,存储过程只是把你的查询语句形成一个固定的格式,这样你要查询的时候就不用每次都执行查询语句了,sql在执行的时候都会将你的sql语句转换为字节码,然后机器才能运行,存储过程就节省了这一步,已经形成了字节码,所以速度才会快,特别是执行次数比较多的时候,可以节省很多时间
mysql存储过程如何遍历查询结果并更新到另一张表
mysql遍历存储 sql查出来的结果集:表:t_bm_integral第一张图里边的sql查出了一个结果集 里面包含 包含memberid 和integral字段,现需要把这个结果集里面的integral插入或更新到第二张图里边表(表名:t_bm_integral)的integral字段(如果第一张图里边的memberid在第二张图里边存在则更新其integral,不存在则把第一张图里memberid和integral字段作为一条新的记录插入),存储过程语句怎么写?
怎样得到mysql存储过程多条语句的结果集
存储过程经常需要返回多个结果集。 Mysql 中直接用 select 即可返回结果集。而 oracle 则需要使用游标来返回结 果 集。这一点 Mysql 相对比较方便,如下代码即可实现输出两个结果集:
CREATE PROCEDURE test_proc_multi_select()
BEGIN
select * from testproc;
select * from testproc where id=1;
END;
java 中利用循环,即可获取结果集数据:
con = MConnection.getConn();
String sql = "{call test_proc_multi_select()}";
cs = con.prepareCall(sql);
boolean hadResults = cs.execute();
int i = 0;
while (hadResults) {
System.out.println("result No:----" + (++i));
ResultSet rs = cs.getResultSet();
while (rs != null && rs.next()) {
int id1 = rs.getInt(1);
String name1 = rs.getString(2);
System.out.println(id1 + ":" + name1);
}
hadResults = cs.getMoreResults(); // 检查是否存在更多结果集
}
mysql存储过程传入一个参数返回结果集
mysql中要获得存储过程的返回值,可以增加一个out参数,用来返回。
mysql中存储过程的例子:
CREATE PROCEDURE addvoucher (
IN userid INT,
IN voucherid INT,
OUT result INT
)
BEGIN
SELECT
@endate_a := endate ,@batch_a := batch ,@c_count_a := c_count,
@isdead_a := isdead
FROM
t_voucher
WHERE
id = voucherid;
SET autocommit = 0;
IF EXISTS (
SELECT
*
FROM
t_user_voucher tuv,
t_voucher tv
WHERE
tv.id = tuv.voucherid
AND tv.batch =@batch_a
) THEN
SET result = 1;-- 已存在
SELECT
result;
ELSE
IF @c_count_a > 0 THEN
IF (
TO_DAYS(@endate_a) - TO_DAYS(NOW())
) > 0 THEN
MYSQL 存储过程能返回结果集吗
MYSQL 存储过程能返回结果集
可以通过游标循环获取对应的结果,与resultset的用处是一致的
菜鸟提问:mysql 存储过程返回数据集怎么写
DELIMITER //
CREATE DEFINER=`root`@`%` PROCEDURE testProc()
BEGIN
SELECT 'Hello 1' AS A, 'World 1' AS B UNION ALL
SELECT 'Hello 2' AS A, 'World 2' AS B;
END //
DELIMITER ;
mysql> call testProc();
+---------+---------+
| A | B |
+---------+---------+
| Hello 1 | World 1 |
| Hello 2 | World 2 |
+---------+---------+
2 rows in set (0.00 sec)
Query OK, 0 rows affected (0.01 sec)
上面这种效果, 是你要的效果么?
追问
不是这样。
我要的是直接获取数据表中的内容 比如有一个表 :
| id | name |
| 1 | name 1 |
| 2 | name 2 |
| n | name n |
| 100 | name 100 |
我要获取ID小于100的