代码之家  ›  专栏  ›  技术社区  ›  makstaks

在另一个存储过程中使用mysql存储过程的结果集

  •  3
  • makstaks  · 技术社区  · 14 年前

    我有一个mysql存储过程sp1(),它返回一个结果集。

    我想在sp2()内部调用sp1(),并循环通过sp1()的结果集来做一些额外的工作。

    我不想包含sp1()中的逻辑,因为它会使sp2()太复杂。

    有什么建议吗?

    谢谢。

    2 回复  |  直到 14 年前
        1
  •  4
  •   Jon Black    14 年前

    你想做的听起来不是特别好,也许你应该考虑重新设计这两个过程。但是,您可以这样做作为快速修复:

    让您的sp2存储过程将中间结果写入一个临时表,然后您可以访问sp1内部的/process。然后,一旦sp1返回,就可以删除在sp2中创建的临时表。

    http://pastie.org/883881

    delimiter ;
    drop procedure if exists foo;
    delimiter #
    
    create procedure foo()
    begin
    
      create temporary table tmp_users select * from users;
    
      -- do stuff with tmp_users
    
      call bar();
    
      drop temporary table if exists tmp_users;
    
    end #
    
    delimiter ;
    
    drop procedure if exists bar;
    
    delimiter #
    
    create procedure bar()
    begin
      -- do more stuff with tmp_users
      select * from tmp_users;
    end #
    
    delimiter ;
    
    call foo();
    

    不是很优雅,但应该有技巧

        2
  •  0
  •   Kapil D    14 年前

    光标可以帮助解决这个问题。

    我不确定这是否可行,但是 为sp1()的select调用创建一个光标,并像通常的光标一样对其进行迭代。