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
----将存储过程返回的列值再重新插入源表中
温馨提示:内容为网友见解,仅供参考
无其他回答

如何把一个存储过程返回的结果集存入到一个临时表
1 先把临时表创建好,用insert into #tmp exec myProc 2 不建临时表,用openrowset select * into # from openrowset('SQLOLEDB','AVAST';'sa';'lichao','exec Northwind..myProc')--存储过程钱加上数据库名

怎么样执行一个存储过程,将返回来地结果插入到表中
1.按照返回的结果集结构先创建表,然后运行存储过程,插入结果到表中;SQL codecreate table tb()insert tb exec 存出過程 2.不指定表结构,直接插入到临时表中

SQL存储过程返回的两个结果集,怎么插入到临时表?
在接收结果的过程或代码中循环读取结果数据,再插入即可,又或者你可以在将要返回结果集的存储过程中直接插入临时表

【MYSQL】存储过程 循环插入数据
首先,打开Navicat,找到工具栏中的函数选项,然后选择新建功能,定位到过程选项。无需设置入参,简单点击即可完成步骤一。接下来,编写循环插入的核心代码。只需将代码段中的表名和字段名替换为你实际需要的,例如设置一个简单的WHILE循环,如'i'从1开始,当'i'小于或等于2时,循环执行两次,如:WHILE...

mysql中sql语句查询的同时根据条件将数据插入到另一个表的做法?_百度...
具体语法:TABLE table_name [ORDER BY column_name] [LIMIT number [OFFSET number]]其实从语法上看,可以排序,也可以过滤记录集,不过比较简单,没有 SELECT 那么强大。示例 1 简单的建一张很小的表 y1,记录数为 10 条。表 t1,插入 10 条记录 mysql-(ytt\/3305)->create table t1 (r1 ...

MySQL表同步方法详解实现不同表数据自动同步mysql不同表数据同步
存储过程是MySQL中的一种特殊程序,可以接受输入参数并返回多个输出结果。基于存储过程的表同步方法,即通过在数据库中设置一个存储过程,定期执行存储过程,将源表数据同步到目标表中。示例代码:\/ 创建存储过程,将源表数据同步到目标表中 \/ CREATE PROCEDURE sync_table()BEGIN INSERT INTO target_table...

mysql存储过程怎么把一个表的数据取模分给不同的表?
首先定义变量:done表示循环结束标志,mod_num表示取模结果,cur表示游标。接着使用DECLARE CONTINUE HANDLER设置游标的异常处理方式。使用OPEN语句开启游标,通过FETCH语句从游标中获取数据。利用IF语句根据id的取模结果决定数据插入目标表。LEAVE语句用于退出循环,CLOSE语句关闭游标。最后执行存储过程即可完成按...

java调用mysql存储过程执行后返回了参数正确但没有插入数据也没有报错...
values(v_account,v_password,v_sex,v_email,v_QQ);end if;flag=0就执行插入操作,否则直接跳过,不执行 ,也是不会报错的 看一下你的数据库里面是不是有满足这个SQL语句的数据:select count(password) into flag from users where account=v_account;如果有满足的话,就不会插入数据的 ...

...我在mysql写了一个存储过程返回一个结果集,如下图,我在SSH2的项目...
使用HIbernate调用存储过程的方法如下:匿名内部类,HibernateCallback中执行存储过程 语法 {call 存储过程名(?,?,?)} ?为参数占位符 示例如下:List logList = (List)this.getHibernateTemplate().execute(new HibernateCallback(){ SuppressWarnings("unchecked")Override public Object doInHibernate(...

MYSQL存储过程里,如果我要输入如"a, 3,100,qwe"这样一个字符串,如何去...
输入参数有data 就是你要插入的字符串,deli 是这个字符串的分隔符。建立tb1char 表:create table tb1char(data varchar(100));调用上述存储过程:call split_str("a, 3,100,qwe",",");..还有就是这里面用到了mysql里面的substring_index函数。。你可以去查一下这个函数。

相似回答