mysql 存储过程怎么赋值?

如图所以,我用游标查询出值赋值table_names变量,现在我想把table_name变量的值赋给下面那条语句,请问怎么赋值?我现在这样它table_name变量直接当... 如图所以,我用游标查询出值赋值table_names 变量,现在我想把table_name 变量的值赋给下面那条语句,请问怎么赋值?我现在这样它table_name变量直接当表名了,报一个表不存在的错误。 展开
 我来答
0808xyj
推荐于2016-10-30 · TA获得超过1891个赞
知道大有可为答主
回答量:1237
采纳率:100%
帮助的人:1077万
展开全部
DELIMITER $$
USE `test`$$
DROP PROCEDURE IF EXISTS `p_getAllTablesCount`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `p_getAllTablesCount`()
BEGIN
        DECLARE tableName VARCHAR (100);
        DECLARE tablesn VARCHAR (100);
        DECLARE tableCount INT;
        DECLARE stopFlag INT;
        DECLARE sqlStr VARCHAR(1000);
        -- 注意:请修改数据库名称
        DECLARE cursor_name CURSOR  FOR SELECT TABLE_NAME  FROM information_schema.tables WHERE table_schema='test';
        DECLARE CONTINUE HANDLER FOR SQLSTATE '02000'  SET stopFlag=1;
        CREATE TABLE IF NOT EXISTS temp_table(table_name VARCHAR(100),table_count VARCHAR(100));   
        OPEN cursor_name;
        REPEAT
        FETCH cursor_name INTO tableName;
        SET sqlStr = CONCAT('SELECT COUNT(1) into @tableCount FROM ', tableName);
        SELECT sqlStr INTO @sqlStr;
        -- select  @sqlStr;
        SELECT @tableCount INTO tableCount;
        BEGIN
          PREPARE stepInsertIntoTable FROM @sqlStr;
          EXECUTE stepInsertIntoTable;
        END;
        SET sqlStr = CONCAT('insert into  temp_table values(''',CONCAT(tableName),''',''',CONCAT(tableCount),''');');
        SELECT sqlStr INTO @sqlStr;
        BEGIN
            PREPARE stepInsertIntoTable FROM @sqlStr;
            EXECUTE stepInsertIntoTable;
        END;
        UNTIL stopFlag  END REPEAT;
        CLOSE cursor_name;   
        SELECT table_name,table_count FROM temp_table ORDER BY table_count DESC;
        -- PREPARE step FROM @sql1;
        -- EXECUTE step;
        DROP TABLE  temp_table;
    END$$
DELIMITER ;
更多追问追答
追问

是能赋值成功了,但是查询数据一直为0。。怎么回事?

追答
你的可以调试啊,用的是什么环境啊? 你需要编译执行啊!
BEGIN
PREPARE stepInsertIntoTable FROM @sqlStr;
EXECUTE stepInsertIntoTable;
END;
小炫马扎
高粉答主

推荐于2018-04-13 · 关注我不会让你失望
知道顶级答主
回答量:3.4万
采纳率:86%
帮助的人:4774万
展开全部
Mysql存储过程查询结果赋值到变量的方法

把查询结果赋值到变量,大部分情况下使用游标来完成,但是如果明确知道查询结果只有一行(例如统计记录的数量,某个字段求和等),其实可以使用set或into的方式来实现赋值。示例代码:

drop table if exists test_tbl;
create table test_tbl (name varchar(20), status int(2));
insert into test_tbl values('abc', 1),('edf', 2),('xyz', 3);
drop procedure IF EXISTS pro_test_3;
delimiter //
create procedure pro_test_3()
begin
DECLARE cnt INT DEFAULT 0;
select count(*) into cnt from test_tbl;
select cnt;
-- 多个列的情况下似乎只能用 into 方式
select max(status), avg(status) into @max, @avg from test_tbl;
select @max, @avg;
end
delimiter ;
call pro_test_3();
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
昏暗的夜晚
2016-01-06 · TA获得超过965个赞
知道答主
回答量:75
采纳率:0%
帮助的人:14.8万
展开全部
insert into sddd(dsfsafa)values("dfdfdfe");
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式