2015-06-24 14 views
0

Сейчас пытаются создать новую процедуру в качестве корневого пользователя с некоторыми дополнительными параметрамиMYSQL хранимые процедуры - Невозможно создать процедуру

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 ; 

исполняющих выше удаляет старую процедуру, но не создает новые дополнительные Params определены

Запуск SP через PHPMyAdmin

enter image description here

ОБНОВЛЕНО процедуры, применяемые RE

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 termial

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) 

Если кто-то может помочь мне понять, что я делаю неправильно здесь, я бы очень признателен. Спасибо.

ответ

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 вам не нужен раздел разделителей в коде, а вы можете выбрать их из пользовательского интерфейса.

+0

Будучи новичком, я не понимаю, что именно нужно передать в разделителе? – Slimshadddyyy

+0

Проверьте этот ответ http://stackoverflow.com/questions/29228490/why-delimiter-used-with-stored-procedure-in-mysql/29228588#29228588, поэтому вы можете использовать '$$' или '//' для ваш разделитель, как вы пожелаете. Вы выбираете то, что не может появиться в запросе. –

+0

Выполнено с тем, что вы сказали, но теперь 'Неизвестная таблица 'user_temp'', хотя она существует в DB' main_user' Связана ли это с ошибкой процедуры sotred? – Slimshadddyyy

 Смежные вопросы

  • Нет связанных вопросов^_^