1. 程式人生 > >mysql使用儲存過程將一個表中的資料匯入另一個表

mysql使用儲存過程將一個表中的資料匯入另一個表

儲存過程
本人也是第一次使用儲存過程,中間遇到了很多坑,在此記錄一下,希望能幫助使用的人少踩點坑。。
先說一下我使用儲存過程的需要,其實需求很簡單就是把一個表中的資料匯入一個新的表中,並且刪除原有表中的資料,說白了就是一個數據的備份

我是使用navicat進行編輯的,我認為用好用的工具就要使用,能省事就省事,畢竟人生時間不多,不要浪費時間在那些無用的事情上。

CREATE DEFINER=root@localhostPROCEDUREuser_logs`()
begin
– 宣告一個標誌done, 用來判斷遊標是否遍歷完成
DECLARE done INT DEFAULT FALSE;
– 宣告一個變數,用來存放從遊標中提取的資料
特別注意這裡的名字不能與由遊標中使用的列明相同,否則得到的資料都是NULL


DECLARE lid varchar(255) DEFAULT NULL;
DECLARE lname varchar(255) DEFAULT NULL;
DECLARE lpid varchar(255) DEFAULT NULL;
DECLARE lzindex varchar(255) DEFAULT NULL;
DECLARE listype varchar(50) DEFAULT NULL;
DECLARE ldescpt varchar(50) DEFAULT null;
DECLARE lcode varchar(50) DEFAULT NULL;
DECLARE licon varchar(50) DEFAULT NULL;
DECLARE lpage varchar(50) DEFAULT NULL;
DECLARE linsert_time varchar(50) DEFAULT NULL;
DECLARE lupdate_time varchar(50) DEFAULT NULL;
– 宣告遊標對應的 SQL 語句
DECLARE cur CURSOR FOR select id,name, pid,zindex,istype,descpt,code,icon,page,insert_time,update_time from permission;
– 在遊標迴圈到最後會將 done 設定為 TRUE
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
– 執行查詢
open cur;
– 遍歷遊標每一行
read_loop: LOOP
– 提取遊標裡的資料
FETCH cur INTO lid,lname,lpid,lzindex,listype,ldescpt,lcode,licon,lpage,linsert_time,lupdate_time ;
– 宣告結束的時候
IF done THEN
LEAVE read_loop;
END IF;
INSERT INTO permissions(id,name, pid,zindex,istype,descpt,code,icon,page,insert_time,update_time) VALUES( lid,lname,lpid,lzindex,listype,ldescpt,lcode,licon,lpage,linsert_time,lupdate_time);
delete from permission;
END LOOP;
– 關閉遊標
CLOSE cur;

end
上圖:

希望你特別注意我使用紅色線框起來的欄位,很有可能就是這出問題,我就是在這踩的坑

以上就是我這次使用的的全過程,能幫到你就點點贊,不能幫到你也別踩,小心我手中30米長的大刀,分分鐘秒殺你。。。。。。。。。。。。。。