首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >存储过程

存储过程
EN

Stack Overflow用户
提问于 2010-01-12 13:59:01
回答 1查看 204关注 0票数 0

在下面的过程中,我希望将title_id设置为@v_title_id变量,以便可以在该过程中使用它。任何想法都要提前考虑。我使用的是InnoDB引擎类型。

代码语言:javascript
复制
DELIMITER //

DROP PROCEDURE IF EXISTS sp_Title_SplitGenres //

CREATE PROCEDURE sp_Title_SplitGenres
(
        p_genre_id          INT,
        p_genre_str         VARCHAR(2000)
)
BEGIN

        SET @v_stringseperator = '::::'   ;

        SET @v_title_id = (select title_id from filmo_title_genre where genre_id = p_genre_id);

        WHILE LENGTH(TRIM( p_genre_str ))  > 0
        DO
         SET @v_curr_Str := (SELECT SUBSTRING_INDEX( p_genre_str, @v_stringseperator, 1 ));
         SET p_genre_str =  (SELECT LTRIM(TRIM(LEADING CONCAT(@v_curr_Str ,@v_stringseperator)   FROM  p_genre_str)) );

        create temporary table filmo_title_genre_temp
        (
             title_id     int(11) NOT NULL,
             genre_id     int(11) NOT NULL,
             sequence_num int(11) NOT NULL default '0',
             PRIMARY KEY  (title_id,genre_id,sequence_num)
        )ENGINE = InnoDB;

        while @v_title_id > 0
        DO

        select title_id,genre_id from filmo_title_genre where title_id = @v_title_id ;
        END WHILE;

        END WHILE;

        REPLACE INTO filmo_title_genre 
        SELECT * FROM filmo_title_genre_temp;

       drop table filmo_title_genre_temp;       

       delete from filmo_title_genre
       where genre_id = p_genre_id;

END //

DELIMITER ;
EN

回答 1

Stack Overflow用户

发布于 2010-01-12 14:25:53

我不太喜欢mysql (直到我打开这篇文章我才看到这个标记),但我认为在尝试从select语句设置变量时,您应该使用SELECT而不是 set 。您可以让解析器知道这是一个表操作。

代码语言:javascript
复制
SELECT @v_title_id := title_id from filmo_title_genre where genre_id = p_genre_id;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2046988

复制
相关文章

相似问题

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