Arr*_*und 7 mysql mysqli stored-procedures
我有两个程序说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
Run Code Online (Sandbox Code Playgroud)
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 //
Run Code Online (Sandbox Code Playgroud)
当我将值插入proc1中的临时表时,proc2中的第二列对我来说并不重要.
Q1.如何将从过程返回的特定列插入临时表?在我的情况下proc2的第一列.
简短的回答:这是不可能的。
长答案:这是不可能的,但有一些解决方法可以达到相同的效果。
选项 1:向临时表添加虚拟列。将所有列插入Proc2到临时表中。然后删除虚拟列。肮脏的。
选项2:向 中添加一个参数Proc2,aBOOLEAN可能是一个不错的选择。根据参数值插入更多或更少的列。少脏一点。
选项 3:您真的需要Proc2接受手术吗?换句话说,它在选择数据之前是否真的修改了数据(或者更一般地说,环境)?换句话说,在这种情况下视图不是更合适吗?
[编辑]
感谢 James Holderness 的指针,我意识到您可能不知道存储过程没有返回值(没有办法解决它)。我想当然地认为“Proc2返回数据”实际上是指“Proc2写入TempWorkedHrs一些Proc1将读回的数据”。如果可以的话,请避免这种方法(选项 1. 或 2. 无论如何都是脏的)。您很可能需要这里的风景。
| 归档时间: |
|
| 查看次数: |
2121 次 |
| 最近记录: |