Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MySQL > Не работает хранимая функция, что не так?


Автор: ki6opr 16.7.2008, 12:25
Доброго всем времени суток.

столкнулся вот с такой проблемой, написал вроде бы все верно, но не работает. Если же в теле функции работаю со всеми входящими параметрами как с глобальными (например @manager_email_in 
Код

SELECT count(jccrm_managers.manager_email)
FROM jccrm_managers WHERE
jccrm_managers.manager_email = @manager_email_in
INTO manager_count_local;        
RETURN manager_count_local;
), 
то все ок , тоесть данная "урезаная" функция вернет количество найденных записей. самое интересное что функции без параметров работают нормально, но при этом не работает ни одна из функций с параметрами. собственно вопрос либо где у меня ошибка в ДНК  smile  либо может быть здесь что то другое (может сервер админы не до собирали например ? при том что смотрел в других базах функции и процедуры написанн также, без изврашений с глобальными переменными)  
вот оригинал
Код

CREATE DEFINER = 'root'@'%' FUNCTION `jccrm_manager_add`(manager_fio_in VARCHAR(100), manager_email_in VARCHAR(255), manager_password_in VARCHAR(255), manager_phone_in CHAR(10))
    RETURNS int(11)
    NOT DETERMINISTIC
    SQL SECURITY DEFINER
    COMMENT 'add new maneger to db'
BEGIN
DECLARE manager_count_local int;
DECLARE credit_account_number_local char(10);
DECLARE current_personal_account_local int;
DECLARE current_credit_account_local int;
DECLARE manager_id_local int;

SELECT count(jccrm_managers.manager_email) INTO manager_count_local
FROM jccrm_managers 
WHERE jccrm_managers.manager_email = manager_email_in;     

IF (manager_count_local > 0) THEN
  RETURN 1;
ELSE
SELECT jccrm_generate_number() INTO credit_account_number_local;

INSERT jccrm_personal_account SET credit_account_number =
credit_account_number_local, credit_account_sum= 0;
INSERT INTO current_personal_account_local VALUES (LAST_INSERT_ID());

INSERT jccrm_credit_account SET credit_account_number =credit_account_number_local, credit_account_sum= 0;

INSERT INTO current_credit_account_local VALUES (LAST_INSERT_ID());

INSERT INTO jccrm_managers SET bonus_account_id =0, 
personal_account_id= current_personal_account_local, 
credit_account_id =current_credit_account_local, manager_email = manager_email_in,
manager_password = PASSWORD(manager_password_in), manager_fio =manager_fio_in, manager_create_date = NOW(),  manager_archive_date=NULL, manager_phone = manager_phone_in;

INSERT INTO manager_id_local VALUES (LAST_INSERT_ID());  
  RETURN manager_id_local;  
END IF;
END;

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)