2013-07-22 3 views
0

Я хочу, чтобы выбрать любое случайное значение я хочу с помощью этой процедурыпроцедура Присвоить переменной

delimiter $$ 
CREATE PROCEDURE randomdigit(troy INT) 
    BEGIN 
      select troy; 
    END$$ 
delimiter ; 

Чтобы использовать его, я звоню call randomdigit(n);

Однако, когда я пытаюсь использовать назначая процедуру к переменная в триггере, я получаю эту ошибку

/* Ошибка SQL (1064): У вас возникла ошибка в синтаксисе SQL; проверьте руководство , соответствующее вашей версии сервера MySQL, для правильного синтаксиса для использования рядом с 'call randomdigit (1); SET the_class_id = (выберите examination_class_id из й»в строке 11 */

Это мой триггер

DELIMITER // 
CREATE TRIGGER lestrigger 
    AFTER INSERT ON examinations 
    FOR EACH ROW 
    BEGIN 
    DECLARE the_last_inserted_id INT ; 
    DECLARE the_class_id INT; 
    DECLARE the_year_id INT; 
    DECLARE lesrandom INT; 

    SET the_last_inserted_id = LAST_INSERT_ID(); 
    SET lesrandom = call randomdigit(1); 
    SET the_class_id = (select examination_class_id from examinations where examination_id = 1); 
    SET the_year_id = (select examination_class_id from examinations where examination_id = 1); 

insert into examination_data (ed_cs_id,ed_examination_id) VALUES ((select cs_id from class_students where cs_class_id = 1 AND cs_year_id = 1),lesrandom); 

END // 
DELIMITER ; 

Правильно ли назначить процедуру переменного таким образом ?.

+0

Пожалуйста, используйте функции вместо – Akhil

ответ

3

ответ Akhil является возможным решением. Если вам нужна хранимая процедура, вы должны работать с параметрами OUT.

delimiter $$ 
CREATE PROCEDURE randomdigit(IN troy INT, OUT result INT) 
    BEGIN 
      set result = troy; 
    END$$ 
delimiter ; 

и назвать его так:

DELIMITER // 
CREATE TRIGGER lestrigger 
    AFTER INSERT ON examinations 
    FOR EACH ROW 
    BEGIN 
    DECLARE the_last_inserted_id INT ; 
    DECLARE the_class_id INT; 
    DECLARE the_year_id INT; 
    DECLARE lesrandom INT; 

    SET the_last_inserted_id = LAST_INSERT_ID(); 
    call randomdigit(1, lesrandom); 
    SET the_class_id = (select examination_class_id from examinations where examination_id = 1); 
    SET the_year_id = (select examination_class_id from examinations where examination_id = 1); 

insert into examination_data (ed_cs_id,ed_examination_id) VALUES ((select cs_id from class_students where cs_class_id = 1 AND cs_year_id = 1),lesrandom); 

END // 
DELIMITER ; 
1

Измените его как функцию

delimiter $$ 
CREATE function randomdigit(troy INT) returns int 
    BEGIN 
      return troy; 
    END$$ 
delimiter ; 

И смените спусковой крючок следующим образом:

DELIMITER // 
CREATE TRIGGER lestrigger 
    AFTER INSERT ON examinations 
    FOR EACH ROW 
    BEGIN 
    DECLARE the_last_inserted_id INT ; 
    DECLARE the_class_id INT; 
    DECLARE the_year_id INT; 
    DECLARE lesrandom INT; 

    SET the_last_inserted_id = LAST_INSERT_ID(); 
    SET lesrandom = randomdigit(1); 
    SET the_class_id = (select examination_class_id from examinations where examination_id = 1); 
    SET the_year_id = (select examination_class_id from examinations where examination_id = 1); 

insert into examination_data (ed_cs_id,ed_examination_id) VALUES ((select cs_id from class_students where cs_class_id = 1 AND cs_year_id = 1),lesrandom); 

END // 
DELIMITER ; 

Надежда это хорошо

+0

я создал новую функцию полностью 'CREATE FUNCTION randstuff (s Int) ВОЗВРАТ Int DETERMINISTIC RETURN s;' –

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