iteye_20504 2009-11-24 13:54
浏览 2644
已采纳

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) ;
谢谢大家.

  • 写回答

2条回答 默认 最新

  • wanghaolovezlq 2009-11-24 14:06
    关注

    从存储过程返回表类型的值也有二种:
    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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog