mysql 存儲過程

delimiter ;;
drop procedure if exists `proc_test` ;;
CREATE PROCEDURE `proc_test`()
BEGIN
    -- 定義變量,變量參數個數和類型和查出來的要一致
    DECLARE done INT DEFAULT FALSE;
    DECLARE field_1 VARCHAR(20);
    DECLARE field_2 VARCHAR(20);

    -- 創建遊標,並存儲數據
    DECLARE cur_list CURSOR FOR SELECT id, name FROM user;
    -- 遊標中的內容執行完後將done設置爲true,遊標找不到下一個就會觸發該語句
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = true;
    -- 打開遊標
    OPEN cur_list;
    -- 執行循環
    read_loop : LOOP
        -- 取遊標中的值
        FETCH cur_list INTO field_1, field_2;
        -- 判斷是否結束循環,一定要放到FETCH之後,因爲在fetch不到的時候纔會設置done爲true
        -- 如果放到fetch之前,先判斷done,這個時候done的值還是之前的循環的值,因此就會導致循環一次
        IF done THEN
            LEAVE read_loop;
        END IF;

        --  執行SQL操作
        SET @sql_insert = CONCAT("insert into user_bak(id, name) VALUES ('", field_1, "','", field_2 ,"')");
        PREPARE sql_param FROM @sql_insert;
            EXECUTE  sql_param ;
        COMMIT;
    END LOOP read_loop;
    -- 釋放遊標
    CLOSE cur_list;
END
;;
delimiter;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章