【问题标题】:How to add results to the resultset of a MySQL stored procedure?如何将结果添加到 MySQL 存储过程的结果集中?
【发布时间】:2011-05-29 09:51:57
【问题描述】:

我正在尝试重写用于从 PHP 到 MySQL 存储过程的文本中搜索关键字的代码,因为 PHP 的 memory_limit 太低,而且我在共享主机上,所以我无法更改内存限制。

我需要编写的是这个(aho-corasick 算法):

for every char ch in text do
     do some transitions
     if there is a result for a given state add it to the output (output is position of word in text and keyword)

我不希望任何人编写该过程,但我想知道是否可以按照我在上面的伪代码中编写的那样附加结果。

注意:我阅读了文档:http://www.peregrinesalon.com/wp-content/uploads/2009/03/mysql-stored-procedures.pdf,因为循环很容易编程,条件也很容易,状态之间的转换可能很慢,但似乎仍然可以。

感谢您的回答!

【问题讨论】:

    标签: mysql stored-procedures


    【解决方案1】:

    在 SP 中,您可以在临时表中构建结果集,并在退出之前随意操作它。然后调用过程可以从那里选择它想要的东西。一旦 MySQL 会话关闭,临时表也将被清除。

    (编辑) http://dev.mysql.com/tech-resources/articles/mysql-storedprocedures.html

    CREATE PROCEDURE procedure1
    BEGIN
    -- create 'results' table
        CREATE TEMPORARY TABLE OUT_TEMP( val0 varchar(20), val1 int);
    
        DECLARE done INT DEFAULT 0;
        DECLARE a CHAR(16);
        DECLARE b INT;
        DECLARE cur1 CURSOR FOR SELECT val0, val1 FROM <another table>;
        DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
    
    --open table to read from
        OPEN cur1;
    
        read_loop: LOOP
        FETCH cur1 INTO a, b;
        IF done THEN
            LEAVE read_loop;
        END IF;
        IF <some condition> THEN
            INSERT INTO OUT_TEMP VALUES (a,b);
        ELSE
      -- insert something else
            INSERT INTO OUT_TEMP VALUES (a,b + 10);
        END IF;
    END LOOP;
    
    CLOSE cur1;
    
    -- output results 
    SELECT * FROM OUT_TEMP;
    DROP TEMPORARY TABLE OUT_TEMP;
    END
    

    【讨论】:

    • 谢谢!能否提供更多详细信息的链接?
    • 这里的一个小观察。创建临时表时出现语法错误。由于临时表是在声明语句的顶部创建的。它说语法错误。有趣的是,我在创建游标之后放置了 create 语句,它运行良好。我不知道可能是什么问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-14
    • 2017-08-04
    • 1970-01-01
    • 2017-01-08
    • 2011-07-15
    • 1970-01-01
    • 2019-10-01
    相关资源
    最近更新 更多