我有两个程序说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的第一列。
答案 0 :(得分:4)
简短回答:这是不可能的。
答案很长:这是不可能的,但有一些解决方法可以达到同样的效果。
选项1:向临时表添加虚拟列。将Proc2
内的所有列插入临时表中。然后放下虚拟列。脏。
选项2:向Proc2
添加参数,BOOLEAN
可能是个不错的选择。根据参数值插入更多或更少的列。不那么脏了。
选项3:您真的需要Proc2
成为程序吗?换句话说,在选择数据之前,它是否真的修改数据(或更一般地说,环境)?换句话说,在这种情况下,观点不会更合适吗?
[编辑]
感谢James Holderness的指针,我意识到你可能没有意识到存储过程没有返回值(没有办法绕过它)。我理所当然地认为,“Proc2
返回数据”,实际上意味着“Proc2
向TempWorkedHrs
写入了Proc1
将会回读的一些数据”。如果可以的话,请避免这种方法(选项1.或2.无论如何都是脏的)。你最有可能需要一个视图。
答案 1 :(得分:0)
这不是一个好习惯,但您可以使用触发器来执行您的程序。