mysql 存储过程怎么赋值?

mysql 存储过程怎么赋值?,第1张

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 

游标:能够对结果集中的每一条记录进行定位,并对指向的记录中的数据进行 *** 作的数据结构。

创建游标: CREATE FUNCTION 函数名称 (参数)RETURNS 数据类型 程序体

存储过程中使用游标的4个步骤:定义游标、打开游标、读取游标数据和关闭游标。

定义游标: DECLARE 游标名 CURSOR FOR 查询语句

打开游标: OPEN 游标名称;

读取游标数据: FETCH 游标名 INTO 变量列表;

关闭游标: CLOSE 游标名;

条件处理语句: DECLARE 处理方式[CONTINUE 或EXIT] HANDLER FOR 问题 *** 作;

流程控制语句:跳转语句(ITERATE语句和LEAVE语句)、循环语句(LOOP、WHILE、REPEAT)、条件判断语句(IF语句和CASE语句)

创建游标: CREATE FUNCTION 函数名称 (参数)RETURNS 数据类型 程序体

存储函数与存储过程很像,但有几个不同点:

1、存储函数必须返回一个值或者数据表,存储过程可以不返回。

2、存储过程可以通过CALL语句调用,存储函数不可以

3、存储函数可以放在查询语句中使用,存储过程不可以

4、存储过程的功能更强大,包括能够执行对表的 *** 作(比如创建表、删除表等)和事务 *** 作

游标 *** 作步骤包含4个:定义游标、打开游标、读取游标数据和关闭游标。

1、创建存储过程

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()


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/6153912.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-03-16
下一篇2023-03-16

发表评论

登录后才能评论

评论列表(0条)

    保存