DECLARE CURSOR
Syntax
DECLARE cursor_name CURSOR [(cursor_formal_parameter[,...])] FOR {select_statement | prepared_statement_name}
cursor_formal_parameter:
[IN] name type [collate clause]DECLARE cursor_name CURSOR [(cursor_formal_parameter[,...])] FOR select_statement
cursor_formal_parameter:
name type [collate clause]Description
Dynamic Cursors
CREATE OR REPLACE PROCEDURE p1(tab VARCHAR(64), min_id INTEGER)
BEGIN
DECLARE v_id INT;
DECLARE v_c1 VARCHAR(100);
DECLARE no_data BOOL DEFAULT FALSE;
-- 1. Declare cursor for the statement name 's1'
DECLARE c1 CURSOR FOR s1;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET no_data = TRUE;
-- 2. Prepare the statement dynamically
PREPARE s1 FROM CONCAT('SELECT id, c1 FROM ', tab, ' WHERE id >= ?');
-- 3. Open cursor and bind parameters
OPEN c1 USING min_id;
fetch_loop: LOOP
FETCH c1 INTO v_id, v_c1;
IF no_data THEN
LEAVE fetch_loop;
END IF;
SELECT v_id, v_c1;
END LOOP;
CLOSE c1;
DEALLOCATE PREPARE s1;
END;
$$
DELIMITER ;Parameters
IN
See Also
Last updated
Was this helpful?

