2012-06-20 5 views
1

у меня есть этот код для процедуры тузда, но я не в состоянии создать процедуруНевозможно создать функцию

DELIMITER @@ 
CREATE PROCEDURE hrpayroll.sal_gen_init 
(IN `emp_id` INT) 
BEGIN 
    DECLARE branch_cd varchar(20) 
    DECLARE comp_cd varchar(20) 
    SELECT p.BRANCH_CD IN branch_cd,p.COMP_CD IN comp_cd FROM p_employee_mst p WHERE p.EMPL_ID = emp_id 
    INSERT INTO p_sal_hdr (COMP_CD,BRANCH_CD,EMPL_ID) VALUES(comp_cd,branch_cd,emp_id) 
END @@ 
DELIMITER ; 

я получаю эту ошибку

Код ошибки 1064, SQL состояние 42000: У вас ошибка в синтаксисе SQL; проверьте руководство, которое соответствует версии сервера MySQL для правильного синтаксиса, чтобы использовать рядом с «DECLARE comp_cd VARCHAR (20) ВЫБОР p.BRANCH_CD ПО branch_cd, p.COMP_CD В ком» в строке 5

ответ

0

Были ошибки синтаксиса. Попробуйте следующую процедуру:

CREATE PROCEDURE sal_gen_ini(IN `emp_id` INT) 
BEGIN 
    DECLARE branch_cd_var varchar(20); 
    DECLARE comp_cd_var varchar(20); 

    SELECT 
    p.BRANCH_CD, p.COMP_CD INTO branch_cd_var, comp_cd_var 
    FROM 
    p_employee_mst p 
    WHERE 
    p.EMPL_ID = emp_id; 

    INSERT INTO p_sal_hdr (COMP_CD,BRANCH_CD,EMPL_ID) 
    VALUES(comp_cd_var,branch_cd_var,emp_id); 
END 

Обратите внимание, что я также переименовал объявленные переменные, чтобы избежать проблем с полями и значениями переменных.


Попробуйте использовать один SELECT...INTO Statement вместо двух выбора и вставки.

0

использование ; (точка с запятой) после заявления declare. ex,

BEGIN 
    DECLARE branch_cd varchar(20); 
    DECLARE comp_cd varchar(20); 
Смежные вопросы