当前位置:网站首页>Use the fetch statement to obtain the repetition of the last row of cursor data
Use the fetch statement to obtain the repetition of the last row of cursor data
2022-07-07 10:22:00 【qq_ forty-two million one hundred and twenty thousand eight hun】
- Problem description :《MySQL Will know 》 Medium P179 After the execution of the stored procedure, a row is repeatedly inserted in the new table .
- stored procedure processorders( To calculate the orders The total amount of each order in the table and deposit in a new table )
# Create a stored procedure to calculate the total amount of each order and store it in a new table
DELIMITER //
CREATE PROCEDURE processorders()
BEGIN
# Declare local variables
DECLARE done BOOLEAN DEFAULT 0;
DECLARE o INT;
DECLARE t DECIMAL(8,2);
# declare cursor
DECLARE ordernumbers CURSOR
FOR
SELECT order_num FROM orders;
# Declare exception handling , When sql Status as 02000 when , take done Set to 1
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;
# Create a new table to store the results
CREATE TABLE IF NOT EXISTS ordertotals
(order_num INT,
total DECIMAL(8,2)
);
# Open cursor
OPEN ordernumbers;
# Insert all rows in a loop
REPEAT
# Get the order number , When the intra row pointer points to the next row of the last row, executing this statement will make SQLSTATE='02000'
# Cause the execution of the upper handle processing to make done = 1
FETCH ordernumbers INTO o;
# Calculate the total amount with tax , The result will be returned to the parameter t, The stored procedure is at the bottom
CALL ordertotal(o,1,t);
# Insert the order number and total amount into the table
INSERT INTO ordertotals(order_num,total)
VALUES(o,t);
UNTIL done # The end cycle condition is done For the wrong 0
END REPEAT;
# Close cursor
CLOSE ordernumbers;
END//
# Execute query statement
CALL processorders()//
- The result

- Problem analysis : When the pointer in the cursor points to the next row of the last row , Re execution
FETCH ordernumbers INTO o;When this statement , To take the current line and move the pointer down one line , Because the position pointed by the pointer is illegal , So there is a row error , Cause the upper handle processing to trigger , bring done = 1, And then o No new data is inserted , Or the old data of the last round ( That is, the order number in the last line ), Therefore, the last line is repeatedly inserted twice .
resolvent : stay FETCH Judge immediately after the statement is executed done Is it modified to 1, If it is modified to 1, Then the following insert code will not be executed . The stored procedure code above is modified to
DELIMITER //
CREATE PROCEDURE processorders()
BEGIN
# Declare local variables
DECLARE done BOOLEAN DEFAULT 0;
DECLARE o INT;
DECLARE t DECIMAL(8,2);
# declare cursor
DECLARE ordernumbers CURSOR
FOR
SELECT order_num FROM orders;
# Declare exception handling , When sql Status as 02000 when , take done Set to 1
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;
# Create a new table to store the results
CREATE TABLE IF NOT EXISTS ordertotals
(order_num INT,
total DECIMAL(8,2)
);
# Open cursor
OPEN ordernumbers;
# Insert all rows in a loop
REPEAT
# Get the order number , When the intra row pointer points to the next row of the last row, executing this statement will make SQLSTATE='02000'
# Cause the execution of the upper handle processing to make done = 1
FETCH ordernumbers INTO o;
IF !done THEN # The key position of the correction
# Calculate the total amount with tax , The result will be returned to the parameter t, The stored procedure is at the bottom
CALL ordertotal(o,1,t);
# Insert the order number and total amount into the table
INSERT INTO ordertotals(order_num,total)
VALUES(o,t);
END IF;
UNTIL done
END REPEAT;
# Close cursor
CLOSE ordernumbers;
END//Query again ordertotals The result of the table is

Reference material :
边栏推荐
- Appx code signing Guide
- 【ORM框架】
- High number_ Chapter 1 space analytic geometry and vector algebra_ Quantity product of vectors
- ORM -- logical relation and & or; Sort operation, update record operation, delete record operation
- [learning notes - Li Hongyi] Gan (generation of confrontation network) full series (I)
- UnityWebRequest基础使用之下载文本、图片、AB包
- STM32中AHB总线_APB2总线_APB1总线这些是什么
- Fiddler break point
- 反射效率为什么低?
- MCU与MPU的区别
猜你喜欢

High number_ Chapter 1 space analytic geometry and vector algebra_ Quantity product of vectors

Appx代码签名指南

Video based full link Intelligent Cloud? This article explains in detail what Alibaba cloud video cloud "intelligent media production" is

fiddler-AutoResponder

JMeter loop controller and CSV data file settings are used together

JMeter about setting thread group and time

The Himalaya web version will pop up after each pause. It is recommended to download the client solution

The story of Plato and his three disciples: how to find happiness? How to find the ideal partner?

字符串格式化

ORM -- query type, association query
随机推荐
ORM -- grouping query, aggregation query, query set queryset object properties
request对象对请求体,请求头参数的解析
Download Text, pictures and ab packages used by unitywebrequest Foundation
Why does the starting service report an error when installing MySQL? (operating system Windows)
每周推荐短视频:L2级有哪些我们日常中经常会用到的功能?
【二开】【JeecgBoot】修改分页参数
EasyExcel读取写入简单使用
Appx代码签名指南
ORM--查询类型,关联查询
Bean operation domain and life cycle
Smart city construction based on GIS 3D visualization technology
反卷积通俗详细解析与nn.ConvTranspose2d重要参数解释
反射效率为什么低?
【ORM框架】
[email protected]能帮助我们快速拿到日志对象
This article explains the complex relationship between MCU, arm, muc, DSP, FPGA and embedded system
VS Code指定扩展安装位置
Wallys/IPQ6010 (IPQ6018 FAMILY) EMBEDDED BOARD WITH ON-BOARD WIFI DUAL BAND DUAL CONCURRENT
关于hzero-resource报错(groovy.lang.MissingPropertyException: No such property: weight for class)
SolidWorks工程图中添加中心线和中心符号线的办法