0

我有一个类似于伪的存储过程:

create procedure composite(IN a varchar(255),IN b varchar(255),IN c datetime,IN d datetime)
begin
DECLARE str VARCHAR(255);
DECLARE count float;
SET str = '';
SET str = CONCAT("aname like '%",a,"%' "," and bname ='",b,"' ");
set @comp = CONCAT("SELECT * from abc where ",str, "GROUP BY qname");
PREPARE stmt FROM @comp;
EXECUTE stmt;
set count = found_rows();
SET STR1 = CONCAT("aname like '%",a,"%' "," and bname ='",b,"' ");
SET @sql = CONCAT("SELECT * from xyz",str,"GROUP BY DATE(FROM_UNIXTIME(abcdate)),qname");
PREPARE stmt FROM @sql;
EXECUTE stmt;
end//

当我执行此操作时,我得到 2 个结果集作为输出,即执行 2 个 select 语句。我只想要最后一次选择的输出。有没有办法做到这一点?

4

1 回答 1

0

不太明白你想做什么。我想存储过程不完整。

在这种情况下真的有必要使用准备好的语句吗?你需要count浮动吗?

也许这样的东西可能有用:

...
DECLARE count BIGINT UNSIGNED;

SELECT COUNT(*) INTO count /* Here you can use a user variable (@count) and avoiding the local variable (count) */
FROM (
    SELECT 0
    FROM abc
    WHERE aname LIKE CONCAT('%', a, '%') AND bname = b
    GROUP BY qname
) der;

SELECT aname, bname, qname
FROM xyz
WHERE aname LIKE CONCAT('%', a, '%') AND bname = b
GROUP BY qname;
...

第一条语句将在局部变量中存储行数,count并且不会返回数据集。注意变量名和保留字,在这种情况下count是允许的,但请阅读9.3。文档中的保留字

于 2013-09-17T14:04:45.930 回答