问题描述
我是MYSQL的初学者,目前正在练习存储过程。我正在尝试创建一个过程,当给定输入参数时,该过程应该获取整个字段的一行。有什么解决方法吗?如果是的话,那将是一个巨大的帮助。
非常感谢
解决方法
欢迎来到论坛。
存储过程可以简单地由SELECT语句组成,该语句返回所需行中的所有列。例如
CREATE PROCEDURE `myproc`(IN `p_id` INT(11))
READS SQL DATA
SELECT id,COL2,COL3,ETC
FROM `mytable`
WHERE id = 'p_id';
如果需要遍历表,查看满足某些条件的每一行,则需要对“游标”进行DECLARE,然后使用该游标来获取所需的行。这是我用来创建需要遍历表的新过程的模板-可以对其进行调整以满足您的需求。在此模板中,我仅从游标中检索两列,但您可以检索任何数字。您必须为SELECT中的每一列声明一个局部变量,以便FETCH语句在某处放置它从游标中检索到的数据:
CREATE PROCEDURE `traverse_table`()
READS SQL DATA
BEGIN
DECLARE var_id INT(11) UNSIGNED;
DECLARE var_data varchar(16383);
DECLARE done INT DEFAULT FALSE;
DECLARE ecode varchar(1000) ;
DECLARE emsg varchar(1000) ;
DECLARE nextrecord CURSOR FOR # here is the CURSOR DECLARATION
SELECT `myid`,`mydata` # It will return these rows,one
FROM `mytable` # at a time
WHERE `mydata` LIKE "ABC%";
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION
BEGIN
GET DIAGNOSTICS CONDITION 1 ecode = RETURNED_SQLSTATE,emsg = MESSAGE_TEXT;
SELECT var_id,var_data,ecode,emsg;
END;
OPEN nextrecord;
FETCH nextrecord into var_id,var_data; # here is the first Fetch
WHILE (done = FALSE) DO
# >>>>>> do something with var_id,var_data here <<<<<<
SET done = FALSE;
FETCH NEXT FROM records into var_id,var_data; # here is the second and subsequent Fetch
END WHILE;
CLOSE nextrecord;
END