如何将结果添加到MySQL存储过程的结果集中?

问题描述

| 我正在尝试重写代码,以便从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且循环容易编程,条件也容易,状态之间的转换可能很慢,但似乎仍然可能。 感谢您的回答!     

解决方法

        在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
    

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...