mysql使用儲存過程將一個表中的資料匯入另一個表
阿新 • • 發佈:2019-01-26
儲存過程
本人也是第一次使用儲存過程,中間遇到了很多坑,在此記錄一下,希望能幫助使用的人少踩點坑。。
先說一下我使用儲存過程的需要,其實需求很簡單就是把一個表中的資料匯入一個新的表中,並且刪除原有表中的資料,說白了就是一個數據的備份
我是使用navicat進行編輯的,我認為用好用的工具就要使用,能省事就省事,畢竟人生時間不多,不要浪費時間在那些無用的事情上。
CREATE DEFINER=
root@
localhostPROCEDURE
user_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米長的大刀,分分鐘秒殺你。。。。。。。。。。。。。。