Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在存储过程中填充表,mysql_Mysql_Loops_Stored Procedures - Fatal编程技术网

在存储过程中填充表,mysql

在存储过程中填充表,mysql,mysql,loops,stored-procedures,Mysql,Loops,Stored Procedures,有人能解释为什么这个函数不会循环并填充临时表吗?我尝试了很多方法,最多只能得到第一个值来填充。我试图用一个值和一个“:”分隔的字符串(在这个过程中查询)来填充一个表,这样我就可以在更大的查询中引用它。函数SPLIT_STR本身工作得很好,但我似乎不能增加值“a”,这样它就可以将每个字段中的每个值都分隔开 BEGIN DECLARE platform_val VARCHAR(255); DECLARE productName_val VARCHAR(255); DECLARE no_mor

有人能解释为什么这个函数不会循环并填充临时表吗?我尝试了很多方法,最多只能得到第一个值来填充。我试图用一个值和一个“:”分隔的字符串(在这个过程中查询)来填充一个表,这样我就可以在更大的查询中引用它。函数SPLIT_STR本身工作得很好,但我似乎不能增加值“a”,这样它就可以将每个字段中的每个值都分隔开

BEGIN

 DECLARE platform_val VARCHAR(255);
 DECLARE productName_val VARCHAR(255);
 DECLARE no_more_rows BOOLEAN;
 DECLARE num_rows INT DEFAULT 0;
 DECLARE loop_cntr INT DEFAULT 0;
 DECLARE str VARCHAR(255);
 DECLARE a INT DEFAULT 1;


    DECLARE cur1 CURSOR FOR SELECT
    ProductName,
    ProductPlatforms
    FROM Feed
    limit 10;

DECLARE CONTINUE HANDLER FOR NOT FOUND SET no_more_rows = TRUE;

 OPEN cur1;

 select FOUND_ROWS() into num_rows;

  the_loop: LOOP

FETCH  cur1
INTO   productName_val,
       platform_val;

SET str = platform_val;
WHILE a< num_rows DO
SET str=SPLIT_STR(str,":",a);
    insert into temp values (productName_val, str);
    SET a=a+1;
END WHILE;



END LOOP the_loop;

END
开始
声明平台_val VARCHAR(255);
声明productName_val VARCHAR(255);
声明不再有布尔行;
声明num_rows INT默认值为0;
声明循环\u cntr INT默认值为0;
声明str VARCHAR(255);
声明一个INT默认值1;
为SELECT声明cur1游标
产品名称,
产品平台
从饲料
限制10;
声明未找到的继续处理程序集no_more_rows=TRUE;
开放cur1;
选择find_ROWS()进入num_ROWS;
循环:循环
取cur1
进入productName\u val,
月台;
设置str=平台值;
而
这是我想到的主意

CREATE PROCEDURE `col2lines`()
BEGIN
    declare v_platform,v_productName,v_platformAll varchar(255) default null;
    declare v_finished int default 0;

    declare curs cursor for select ProductName,ProductPlatforms from Feed limit 10;
    declare continue handler for not found set v_finished = 1;

    drop temporary table if exists temp_table;
    create temporary table temp_table (
        productName varchar(255),
        platform varchar(255)
    );

    open curs;

    parent: LOOP
        fetch curs into v_productName, v_platformAll;

        if (v_finished = 1) then LEAVE parent; end if;

        child: LOOP
            set v_platform = substring_index(v_platformAll, '::', 1);
            set @strlen = char_length(v_platform);
            if (@strlen > 0) then
                insert into temp_table values (v_productName, v_platform);
                set v_platformAll = substr(v_platformAll, @strlen + 3);
                iterate child;
            end if;
            LEAVE child;
        END LOOP child;

        iterate parent;
    END LOOP parent;

    close curs;

    select * from temp_table;
END

您是否有一个示例行和该行的预期输出,因为您所做的看起来非常复杂,它将是“productName”,“Android::BlackBerry::iPhone::J2ME::PalmOS::Symbian::Windows Mobile::Beos::Dos::Fedora::FreeBSD::Linux::MacOS::OpenBSD::Windows 2000::Windows 7::Windows 9x::Windows NT::Windows Vista::Windows XP::Novell NetWare::Solaris::Unix::Windows Server 2003::Windows Server 2008”我希望产品名称逐行重复:“像产品名称、Windows NTso这样的分隔值每行都有一个产品名称?我添加了declare v_platformAll varchar(255)default null;声明v_productName varchar(255)默认为空;因为它在咆哮,而且它也不喜欢选择临时表。删除后,我运行了它,没有创建或填充任何表:/哦,是的,我忘记申报了。不确定为什么它不喜欢select temp_表…select*from temp_表显示正确的输出。现在把它放到桌子上。这很有效,我真的很感谢你的帮助。你是一个绅士(人?)和学者。我想你可以去掉最后一个
离开父母的
。。。谢谢:)