首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将过程赋值给变量

问将过程赋值给变量
EN

Stack Overflow用户
提问于 2013-07-22 10:55:02
回答 2查看 63关注 0票数 0

我希望使用此过程选择任意随机值。

代码语言:javascript
复制
delimiter $$
CREATE PROCEDURE randomdigit(troy INT)
     BEGIN
          select troy; 
     END$$
delimiter ;

要使用它,我调用call randomdigit(n);

但是,当我尝试将该过程赋值给触发器中的变量时,我会得到以下错误

/* SQL错误(1064):您的SQL语法出现错误;请检查与MySQL服务器版本对应的手册,以获得使用接近“调用随机数字(1)”的正确语法;在第11行*/设置the_class_id =(从e中选择examination_class_id )

这是我的扳机

代码语言:javascript
复制
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 ;

用这种方式将过程赋值给变量是正确的吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-07-22 11:06:01

阿基尔的答案是一个可能的解决办法。如果需要存储过程,则必须使用OUT参数。

代码语言:javascript
复制
delimiter $$
CREATE PROCEDURE randomdigit(IN troy INT, OUT result INT)
     BEGIN
          set result = troy; 
     END$$
delimiter ;

就这样叫它:

代码语言:javascript
复制
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 ;
票数 3
EN

Stack Overflow用户

发布于 2013-07-22 11:00:04

将其作为一个函数进行更改

代码语言:javascript
复制
delimiter $$
CREATE function randomdigit(troy INT) returns int
     BEGIN
          return troy; 
     END$$
delimiter ;

并按以下方式更改触发器

代码语言:javascript
复制
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 ;

希望这样可以

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17785750

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档