mysql 存储过程中变量的定义与赋值 *** 作

mysql 存储过程中变量的定义与赋值 *** 作,第1张

一、变量定义

mysql中变量定义用declare来定义一局部变量,该变量的使用范围只能在begin...end

块中使用,变量必须定义在复合语句的开头,并且是在其它语句之前,也可以同时申明多个变量,如果需要,可以使用default赋默认值。

定义一个变量语法如下:

declare

var_name[,...]

type[default

value]看一个变量定义实例

declare

last

date二、mysql存储过程变量赋值

变量的赋值可直接赋值与查询赋值来 *** 作,直接赋值可以用set来 *** 作,可以是常量或表达式如果下

复制代码

代码如下:

set

var_name=

[,var_name

expr]...给上面的last变量赋值方法如下

set

last

=

date_sub(

current_date(),interval

1

month)下面看通过查询给变量赋值,要求查询返回的结果必须为一行,具体 *** 作如下

select

col

into

var_name[,...]

table_expr我们来通过查询给v_pay赋值。

create

function

get

_cost(p_custid

int,p_eff

datetime)

return

decimal(5,2)

deterministic

reads

sql

data

begin

declare

v_pay

decimail(5,2)

select

ifnull(

sum(pay.amount),0)

into

vpay

from

payment

where

pay.payd<=p_eff

and

pay.custid=pid

reutrn

v_rent

+

v_over

-

v_pay

end

$$

好了,这篇简单的存储过程中变量的定义赋值教程就到这里了,下面我们会接着讲关于myql存储过程的条件的定义与处理。

以下是其它网友的补充

在MySQL的存储过程中,可以使用变量,它用于保存处理过程中的值。

定义变量使用DECLARE语句,语法格式如下:

DECLARE

var_name[,...]

type

[DEFAULT

value]

其中,var_name为变量名称,type为MySQL支持的任何数据类型,可选项[DEFAULT

value]为变量指定默认值。一次可以定义多个同类型的变量,各变量名称之间以逗号“,”隔开。

定义与使用变量时需要注意以下几点:

DECLARE语句必须用在DEGIN…END语句块中,并且必须出现在DEGIN…END语句块的最前面,即出现在其他语句之前。

DECLARE定义的变量的作用范围仅限于DECLARE语句所在的DEGIN…END块内及嵌套在该块内的其他DEGIN…END块。

存储过程中的变量名不区分大小写。

定义后的变量采用SET语句进行赋值,语法格式如下:

SET

var_name

=

expr

[,var_name

=

expr]

...

其中,var_name为变量名,expr为值或者返回值的表达式,可以使任何MySQL支持的返回值的表达式。一次可以为多个变量赋值,多个“变量名=值”对之间以逗号“,”隔开。

例如:

复制代码

代码如下:

begin

declare

no

varchar(20)

declare

title

varchar(30)

set

no='101010',title='存储过程中定义变量与赋值'

end

提示:存储过程中所有的关键字也是不区分大小写的,如BEGIN可以写出begin。

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 


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

原文地址: https://outofmemory.cn/zaji/8751412.html

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

发表评论

登录后才能评论

评论列表(0条)

保存