MYSQL如何把存储过程所返回的结果集插入到表?
是这样:
存储过程 A 返回一些数据 。
存储过程 B 需要把 A 返回的数据插入到 临时表中 。
数据库是从 MS SQL 转过来的, MSSQL 写法如下:
insert into #tab exec A @ID
MYSQL 怎么写?
我会建临时表,会调用存储过程. 但是不会把存储过程的结果放到临时表中去.
create temporary table tt(ID int);
call A(0);
怎么把存储过程的结果放到临时表中去, 就像这样的意思: insert into tt call A(0) ;
谢谢大家.
从存储过程返回表类型的值也有二种:
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 #tmp
GO
----创建返回游标的存储过程
create proc sp_c @cur CURSOR VARYING OUTPUT
AS
begin
set @cur = CURSOR for select colx from #tmp
open @cur /*该过程返回游标,该游标为colx列的查询结果*/
end
GO
----创建返回表的存储过程
create proc sp_d
as
select coly from #tmp /*该过程返回coly列的查询结果*/
go
----创建用于调用以上二个存储过程的存储过程
create proc sp_e
as
begin
declare @x int
declare @cur cursor
----接收游标,并遍历游标
EXEC sp_c @cur OUTPUT
fetch next from @cur into @x
while (@@FETCH_STATUS = 0)
begin
print @x
fetch next from @cur into @x
END
close @cur
deallocate @cur
----将存储过程返回的列值再重新插入源表中
insert into #tmp(coly) EXEC sp_d
select * from #tmp
end
GO
EXEC sp_e
drop proc sp_c
drop proc sp_d
drop proc sp_e
drop table #tmp
mysql> delimiter $$
mysql> create procedure myproc(code int, str varchar(20))
-> begin
-> create temporary table tmpTab(code int,str varchar(20)) select code,str;
-> end
-> $$
Query OK, 0 rows affected (0.00 sec)
mysql> call myproc(11,'test') $$
Query OK, 0 rows affected (0.04 sec)
mysql> select * from tmpTab;
-> $$
+------+------+
| code | str |
+------+------+
| 11 | test |
+------+------+
1 row in set (0.00 sec)