【发布时间】:2011-12-06 05:46:35
【问题描述】:
环境:MySQL 5.1,Linux
我有一个从单个输入值计算多个值的存储过程。这些值作为 OUT 参数返回。我想为每个行集调用此过程,并将值显示为结果集中的列。这些值具有复杂的关系,因此不容易为每个值构造不同的函数。
问题:如何让 OUT 参数显示为表格中的列?
这是我目前所拥有的:
DELIMITER $_$
DROP PROCEDURE IF EXISTS in_out;
CREATE PROCEDURE in_out (
IN s TEXT,
OUT op TEXT,
OUT opn INT,
OUT opd TEXT,
OUT len INT
)
BEGIN
SET op = 'del';
SET opn = 1;
SET opd = substr(s,4);
SET len = LENGTH(SUBSTR(s,4));
END
$_$
DELIMITER ;
然后:
mysql> call in_out('delACT',@op,@opn,@opd,@len);
Query OK, 0 rows affected (0.00 sec)
mysql> select @op,@opn,@opd,@len;
+------+------+------+------+
| @op | @opn | @opd | @len |
+------+------+------+------+
| snv | 1 | ACT | 3 |
+------+------+------+------+
1 row in set (0.00 sec)
到目前为止一切顺利,但我不知道如何为每一行调用此过程并在结果集中返回结果。我想要的是这样的:
dream> select mycol,in_out(mycol) from mytable
+---------+------+------+------+------+
| mycol | @op | @opn | @opd | @len |
+---------+------+------+------+------+
| delACT | del | 1 | ACT | 3 |
+---------+------+------+------+------+
谢谢!
【问题讨论】:
-
你想要来自 SQL Server 的
CROSS APPLY之类的东西,但我不知道 MySQL 是否有等价物。 -
其实,我真正想要的是 PostgreSQL 表函数,但这就是我开始哭泣的地方。
标签: mysql sql stored-procedures