7

我有两个程序说 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 的第一列。

4

2 回答 2

4

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

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

选项 1:在临时表中添加一个虚拟列。将所有列从内部Proc2插入到您的临时表中。然后删除虚拟列。肮脏的。

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

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

[编辑]

感谢 James Holderness 的指针,我意识到您可能不知道存储过程没有返回值(没有办法绕过它)。我理所当然地认为“Proc2返回数据”实际上是指“Proc2写入TempWorkedHrs一些Proc1将回读的数据”。如果可以,请避免使用这种方法(无论如何,选项 1. 或 2. 都很脏)。您很可能需要在这里查看。

于 2013-06-27T23:49:46.957 回答
0

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

于 2013-07-04T02:25:52.060 回答