【问题标题】:MYSQL Stored Procedure - Can not create procedureMYSQL 存储过程 - 无法创建过程
【发布时间】:2015-09-10 09:20:58
【问题描述】:

现在尝试使用一些附加参数以 root 用户身份创建一个新过程

DELIMITER //
USE `user_main_table`;
DROP PROCEDURE IF EXISTS insert_user_temp;
CREATE DEFINER='root'@'localhost' PROCEDURE insert_user_temp()
 BEGIN 
  DECLARE row_coun_no INT;
  SELECT COUNT(`id`) INTO row_coun_no FROM user_temp;
  IF row_coun_no != 0 THEN
    TRUNCATE `user_data`;
    INSERT INTO user_data (employee_id,employee_code,employment_type,`emp_name`,first_name,middle_name,last_name,photo_file_name,email_id)
    SELECT employee_id,`employee_code`,`employment_type`,CONCAT(`first_name`," ",`last_name`),`first_name`,`middle_name`,`last_name`, `email_id`, `photo_file_name` FROM `user_temp`;
    TRUNCATE user_temp;
    UPDATE  `demo_user`.`tbl_users`, `user_main_table`.`user_data` SET tbl_users.profile_pic = user_data.photo_file_name
  END IF;
END;

DELIMITER ;

执行上面的操作会删除旧的过程,但不会创建带有附加参数的新过程

通过 phpmyadmin 运行 SP

更新程序

USE `user_main_table`;
DROP PROCEDURE IF EXISTS insert_user_temp;
CREATE DEFINER='root'@'localhost' PROCEDURE insert_user_temp()
 BEGIN 
  DECLARE row_coun_no INT;
  SELECT COUNT(`id`) INTO row_coun_no FROM user_temp;
  IF row_coun_no != 0 THEN
    TRUNCATE `user_data`;
    INSERT INTO user_data (employee_id,employee_code,employment_type,`emp_name`,first_name,middle_name,last_name,photo_file_name,email_id)
    SELECT employee_id,`employee_code`,`employment_type`,CONCAT(`first_name`," ",`last_name`),`first_name`,`middle_name`,`last_name`, `email_id`, `photo_file_name` FROM `user_temp`;
    TRUNCATE user_temp;
    UPDATE  `demo_user`.`tbl_users`, `user_main_table`.`user_data` SET tbl_users.profile_pic = user_data.photo_file_name
  END IF;
END;

使用mysql终端执行程序

CREATE PROCEDURE insert_user_temp_to_user()
BEGIN 
DECLARE row_coun_no INT;
SELECT COUNT(`id`) INTO row_coun_no FROM user_temp;
IF row_coun_no != 0 THEN
TRUNCATE `user_hrms`;
INSERT INTO user_hrms (employee_id,employee_code,employment_type,`emp_name`,first_name,middle_name,last_name,reporting_authority,department,designation,gender,location_name,branch_id,mobile_number,extension_number,email_id,`status`,`birthdate`,`anniversary`,`photo_file_name`,mtd,ytd,experience ,primary_skills,secondary_skills,joining_date,bu,award_category,award_category_desc)
SELECT employee_id,`employee_code`,`employment_type`,CONCAT(`first_name`," ",`last_name`),`first_name`,`middle_name`,`last_name`,`reporting_authority`,`department`,`designation`,`gender`,`location_name`,`branch_id`,`mobile_number`,`extension_number`,`email_id`,`status`,`birthdate`,`anniversary`,`photo_file_name`,mtd,ytd,experience,primary_skills,secondary_skills,joining_date,bu,award_category,award_category_desc FROM `user_temp`; 
TRUNCATE user_temp;
UPDATE `demo_intranet`.`tbl_users`, `intranet`.`user_hrms` SET tbl_users.profile_pic = user_hrms.photo_file_name
WHERE tbl_users.email = user_hrms.email_id;
END IF;
END;//
Query OK, 0 rows affected (0.02 sec)

如果有人能帮助我理解我在这里做错了什么,我将不胜感激。谢谢。

【问题讨论】:

    标签: mysql sql stored-procedures routines


    【解决方案1】:

    语法上的一些问题

    • 您缺少分隔符

    • 过程名称缺少大括号()


    delimiter //
    CREATE PROCEDURE insert_user_temp()
     BEGIN 
      DECLARE row_coun_no INT;
      SELECT COUNT(`id`) INTO row_coun_no FROM user_temp;
      IF row_coun_no != 0 THEN
        TRUNCATE `user_data`;
        INSERT INTO user_data (employee_id,employee_code,employment_type,`emp_name`,first_name,middle_name,last_name,photo_file_name,email_id)
        SELECT employee_id,`employee_code`,`employment_type`,CONCAT(`first_name`," ",`last_name`),`first_name`,`middle_name`,`last_name`, `email_id`, `photo_file_name` FROM `user_temp`;
        TRUNCATE user_temp;
        UPDATE  `demo_user`.`tbl_users`, `main_user`.`user_data` SET tbl_users.profile_pic = user_data.photo_file_name
        WHERE  tbl_users.email = user_data.email_id;
      END IF;
    END;//
    
    delimiter ;
    

    刚刚在 mysql 终端中测试过,它对我有用

    mysql> use test ;
    mysql> delimiter //
    mysql> CREATE PROCEDURE insert_user_temp()
        ->  BEGIN 
        ->   DECLARE row_coun_no INT;
        ->   SELECT COUNT(`id`) INTO row_coun_no FROM user_temp;
        ->   IF row_coun_no != 0 THEN
        ->     TRUNCATE `user_data`;
        ->     INSERT INTO user_data (employee_id,employee_code,employment_type,`emp_name`,first_name,middle_name,last_name,photo_file_name,email_id)
        ->     SELECT employee_id,`employee_code`,`employment_type`,CONCAT(`first_name`," ",`last_name`),`first_name`,`middle_name`,`last_name`, `email_id`, `photo_file_name` FROM `user_temp`;
        ->     TRUNCATE user_temp;
        ->     UPDATE  `demo_user`.`tbl_users`, `main_user`.`user_data` SET tbl_users.profile_pic = user_data.photo_file_name
        ->     WHERE  tbl_users.email = user_data.email_id;
        ->   END IF;
        -> END;//
    Query OK, 0 rows affected (0.00 sec)
    

    对于 PHPMyadmin,您不需要代码中的分隔符部分,而是可以从用户界面中选择它们。

    【讨论】:

    • 作为一个新手,我不明白到底应该在分隔符中传递什么?
    • 检查此答案stackoverflow.com/questions/29228490/…,因此您可以根据需要使用$$ 或// 作为分隔符。您选择的内容可能不会出现在查询中。
    • 按照你说的做,但是现在Unknown table 'user_temp'虽然它存在于DB下main_user这是否与sotred过程错误有关?
    • 还要检查程序是否在正确的用户下创建,假设您创建了一个程序为root 并尝试与其他用户一起删除该程序不会被删除。
    • user_temp 是临时表吗?记住当前连接存在临时表。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-10
    • 2016-11-19
    • 1970-01-01
    • 1970-01-01
    • 2016-11-11
    • 2017-10-14
    • 2021-07-10
    相关资源
    最近更新 更多