MySQL调用另一个过程并将值插入临时表

时间:2013-06-25 05:18:53

标签: mysql stored-procedures mysqli

我有两个程序说proc1和proc2。我在另一个内部调用一个mysql程序。

在proc1中我想将proc2中的值插入到proc1临时表中.proc2返回两列,但我只想在proc1临时表中插入一列。

Proc2的输出如下

Hrs(Timestamp)    Status
09:30             IN,OUT,IN,OUT 
04:30             IN,OUT
07:30             IN,OUT,IN,OUT
04:25             IN,OUT

Proc1代码

CREATE PROCEDURE Proc1()
BEGIN
   DROP TABLE IF EXISTS TempWorkedHrs ;
   CREATE TEMPORARY TABLE TempWorkedHrs(WorkedHrs TIMESTAMP); 

   INSERT INTO TempWorkedHrs(WorkedHrs)
   CALL Proc2(); 

   SELECT SUM(WorkedHrs) INTO @TotalHrs
     FROM TempWorkedHrs;        
END //

当我在proc1中的临时表中插入值时,proc2中的第二列对我来说并不重要。

Q1。如何将从过程返回的特定列插入临时表?在我的案例中,来自proc2的第一列。

2 个答案:

答案 0 :(得分:4)

简短回答:这是不可能的。

答案很长:这是不可能的,但有一些解决方法可以达到同样的效果。

选项1:向临时表添加虚拟列。将Proc2内的所有列插入临时表中。然后放下虚拟列。脏。

选项2:向Proc2添加参数,BOOLEAN可能是个不错的选择。根据参数值插入更多或更少的列。不那么脏了。

选项3:您真的需要Proc2成为程序吗?换句话说,在选择数据之前,它是否真的修改数据(或更一般地说,环境)?换句话说,在这种情况下,观点不会更合适吗?

[编辑]

感谢James Holderness的指针,我意识到你可能没有意识到存储过程没有返回值(没有办法绕过它)。我理所当然地认为,“Proc2返回数据”,实际上意味着“Proc2TempWorkedHrs写入了Proc1将会回读的一些数据”。如果可以的话,请避免这种方法(选项1.或2.无论如何都是脏的)。你最有可能需要一个视图。

答案 1 :(得分:0)

这不是一个好习惯,但您可以使用触发器来执行您的程序。