这是mycode,用于获取游标中的15行..但是它获取一行而不获取15行中的任何错误在此代码中。任何帮助将不胜感激。在此先感谢
delimiter $$
drop procedure if exists retrieve_relstr_roc_price;
create procedure retrieve_relstr_roc_price(
in p_begin_date datetime
)
begin
declare no_more_rows boolean;
declare l_symbol varchar(10);
declare l_commit_rows int default 60;
declare l_row_num int default 0;
declare roc_value_cursor cursor for
select * from(select distinct(symbol) as symbol from
eqt_price_ta_relstr where category_name in ((select * from (select
sn.category_name from eqt_price_ta_relstr ept
inner join sectornames sn on sn.symbol = ept.symbol where ept.category_name
= "SPsector" and ept.close_date >= p_begin_date group by sn.category_name order by ept.rank5 limit 0,1 ) t4 )) and close_date >= p_begin_date group by symbol order by rank5 limit 15) as t1;
declare continue handler for not found set no_more_rows = true;
open roc_value_cursor;
cursor_loop: loop
fetch roc_value_cursor
into l_symbol;
if no_more_rows
then
close roc_value_cursor;
leave cursor_loop;
end if;
/*next part code used the cursor value*/
最佳答案
我无法重现该问题:
mysql> DROP TABLE IF EXISTS `t1`;
Query OK, 0 rows affected (0.00 sec)
mysql> CREATE TABLE IF NOT EXISTS `t1` (
-> `symbol` VARCHAR(10)
-> );
Query OK, 0 rows affected (0.01 sec)
mysql> INSERT INTO `t1`
-> VALUES ('symbol 1'), ('symbol 2'),
-> ('symbol 3'), ('symbol 4'),
-> ('symbol 5'), ('symbol 6'),
-> ('symbol 7'), ('symbol 8'),
-> ('symbol 9'), ('symbol 10'),
-> ('symbol 11'), ('symbol 12'),
-> ('symbol 13'), ('symbol 14'),
-> ('symbol 15');
Query OK, 15 rows affected (0.00 sec)
Records: 15 Duplicates: 0 Warnings: 0
mysql> DROP PROCEDURE IF EXISTS `retrieve_relstr_roc_price`;
Query OK, 0 rows affected (0.00 sec)
mysql> DELIMITER //
mysql> CREATE PROCEDURE `retrieve_relstr_roc_price`()
-> BEGIN
-> DECLARE `no_more_rows` BOOL DEFAULT FALSE;
-> DECLARE `l_symbol` VARCHAR(10);
-> DECLARE `l_row_num` INT UNSIGNED DEFAULT 0;
-> DECLARE `roc_value_cursor` CURSOR FOR
-> SELECT * -- It's recommended to identify the columns: SELECT `symbol` ...
-> FROM (
-> SELECT `symbol`
-> FROM `t1`
-> ) `der`;
-> DECLARE CONTINUE HANDLER FOR NOT FOUND SET `no_more_rows` := TRUE;
-> OPEN `roc_value_cursor`;
-> `cursor_loop`: LOOP
-> FETCH `roc_value_cursor` INTO `l_symbol`;
-> IF `no_more_rows` THEN
-> CLOSE `roc_value_cursor`;
-> LEAVE `cursor_loop`;
-> END IF;
-> SET `l_row_num` := `l_row_num` + 1;
-> END LOOP `cursor_loop`;
-> SELECT `l_row_num`;
-> END//
Query OK, 0 rows affected (0.00 sec)
mysql> DELIMITER ;
mysql> CALL `retrieve_relstr_roc_price`;
+-------------+
| `l_row_num` |
+-------------+
| 15 |
+-------------+
1 row in set (0.01 sec)
Query OK, 0 rows affected (0.01 sec)
请参见db-fiddle。