mysql - “字段列表”mysql存储过程中的未知列。如何解决这个问题?
问题描述
DELIMITER $$
CREATE or replace PROCEDURE test()
LANGUAGE SQL
NOT DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT ''
BEGIN
DECLARE DNO varchar(4000);
DECLARE ORG_MRK FLOAT;
DECLARE RV1 FLOAT;
DECLARE RV2 FLOAT;
DECLARE D2 FLOAT;
DECLARE D3 FLOAT;
DECLARE D FLOAT;
DECLARE D1 FLOAT;
DECLARE lst_val FLOAT;
DECLARE T FLOAT;
DECLARE CUR1 cursor for select col1,col2,col3,col4 from table1;
OPEN CUR1;
read_loop: LOOP
FETCH CUR1 INTO DNO,ORG_MRK,RV1,RV2;
WHILE CUR1%FOUND DO
BEGIN
set D1=85;
set D=100;
IF D=D1 THEN
BEGIN
UPDATE table2 SET FMARK_100=GREATEST(ORG_MRK,RV1) WHERE rtrim(ltrim(fmark_100)) =''
and RTRIM(LTRIM(DUMYNUMB))=DNO;
END;
ELSE
UPDATE table2 SET FMARK_100=lEAST(ORG_MRK,RV1) WHERE rtrim(ltrim(fmark_100)) =''
and RTRIM(LTRIM(DUMYNUMB))=DNO;
END IF;
END;
END WHILE;
END LOOP;
CLOSE CUR1;
END$$
DELIMITER ;
它创建成功,没有错误返回。但是当调用这个存储过程时它给出了错误。产生这个错误
1054 - “字段列表”中的未知列“CUR1”。如何解决此问题。有没有版本兼容性问题。
解决方案
DELIMITER $$
CREATE or replace PROCEDURE test()
LANGUAGE SQL
NOT DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT ''
BEGIN
DECLARE DNO varchar(4000);
DECLARE ORG_MRK FLOAT;
DECLARE RV1 FLOAT;
DECLARE RV2 FLOAT;
DECLARE D2 FLOAT;
DECLARE D3 FLOAT;
DECLARE D FLOAT;
DECLARE D1 FLOAT;
DECLARE lst_val FLOAT;
DECLARE T FLOAT;
-- add variable-flag
DECLARE done INT DEFAULT 0;
DECLARE CUR1 cursor for select col1,col2,col3,col4 from table1;
-- add handler which sets flag when cursor is empty
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
OPEN CUR1;
read_loop: LOOP
FETCH CUR1 INTO DNO,ORG_MRK,RV1,RV2;
-- check does the record was fetched
IF done THEN
-- leave cycle if cursor is empty
LEAVE read_loop;
END IF;
set D1=85;
set D=100;
IF D=D1 THEN
UPDATE table2 SET FMARK_100=GREATEST(ORG_MRK,RV1) WHERE rtrim(ltrim(fmark_100)) =''
and RTRIM(LTRIM(DUMYNUMB))=DNO;
ELSE
UPDATE table2 SET FMARK_100=lEAST(ORG_MRK,RV1) WHERE rtrim(ltrim(fmark_100)) =''
and RTRIM(LTRIM(DUMYNUMB))=DNO;
END IF;
END LOOP;
CLOSE CUR1;
END$$
DELIMITER ;
推荐阅读
- python - 如何将 TGA 文件格式转为 DDS 格式?
- linux - 如何识别内核版本
- c# - 将匿名类型列表转换为普通列表
- html5-canvas - 打印整个 Cytoscape.js HTML5 画布。不仅仅是可见的部分
- ios - 使用 Swift 和 Firebase,我如何从我的应用程序的经过身份验证的用户向自己发送一封自动电子邮件?
- elasticsearch - elasticserarch 地理距离过滤器,但距离在文档中而不是在查询中
- python - 如果没有路径,A* 算法就会卡住
- c - LDBL_MIN 返回 0,LDBL_MAX 在 C 中返回 #QNAN
- javascript - 仅在返回值时运行 Mongoose 查询
- r - Identify interrupted observations