精华内容
下载资源
问答
  • sql存储过程定义变量
    千次阅读
    2019-05-28 11:07:40

    declare @SqlStr nvarchar(100)
    declare @show_num int
    set @SqlStr=N'Select @conid=count(id) from '+'jk'
    exec sp_executesql @SqlStr,N'@conid int output',@show_num output
    print @show_num
     

    更多相关内容
  • 一、变量定义 mysql中变量定义用declare来定义...二、mysql存储过程变量赋值 变量的赋值可直接赋值与查询赋值来操作,直接赋值可以用set来操作,可以是常量或表达式如果下 代码如下: set var_name= [,var_name expr]
  • SQLServer中对已经定义变量赋值的方式用两种,分别是 SET 和 SELECT。对于这两种方式的区别,SQL Server 联机丛书中已经有详细的说明,但很多时候我们并没有注意,其实这两种方式还是有很多差别的。
  • 上一篇我们讲到了SQL存储过程的基本定义,怎么创建,使用,这篇就来讲一下变量的使用。 变量分文局部变量和全局变量 局部变量是@开头,全局变量是@@开头,这里我们主要讲局部变量,全局变量我们后面再讲。 在c# 语言...
  • 由于服务器原因,我不能直接在数据访问层写SQL,所以只好抽离出来放到存储过程里面。 这里就出现了一个问题,我花费了好久才弄通!  其实就是很简单的一个SQL语句:  update table1 set field1=value1,field2 ...
  • 存储过程中的变量定义

    千次阅读 2021-01-21 13:14:38
    MySQL存储过程常见的变量:局部变量、用户变量、系统变量……一、局部变量过程体中,可以声明局部变量,用来临时保存一些值。1、定义局部变量语法:DECLARE var_name[, var_name] ... type [DEFAULT value];其中,...

    As we all know,MySQL的存储过程就类似于脚本,既然似脚本就会有使用到变量的时候。

    MySQL存储过程常见的变量:局部变量、用户变量、系统变量……

    一、局部变量

    在过程体中,可以声明局部变量,用来临时保存一些值。

    1、定义局部变量语法:

    DECLARE  var_name[, var_name] ...  type [DEFAULT value];

    其中,type为MySQL的数据类型,如:int、float、date、varchar(length)

    注意:

    ①DECLARE用来声明局部变量,且DECLARE仅被用在BEGIN ... END复合语句里,并且必须在复合语句的开头,在任何其它语句之前;可以被用在嵌套的块中,除了那些用相同名字声明变量的块。

    ②如果要给变量提供一个默认值,使用DEFAULT子句(值可以是常数,也可以指定为一个表达式);如果没有DEFAULT子句,初始值为NULL。

    2、基本格式:

    CREATE PROCEDURE sp_name ([proc_parameter[,...]])

    BEGIN

    DECLARE var_name1 type [DEFAULT value];

    DECLARE var_name2 type [DEFAULT value];

    DECLARE……;

    [characteristic ...];

    END

    例1:创建过程,为局部变量指定默认值,并调用该过程

    mysql>delimiter $$

    mysql> create procedure test1(out num1 int)->begin-> declare num2 int default 100;-> set num1=num2;->end->$$

    mysql>delimiter ;

    mysql>call test1(@num);

    mysql> select@num;+------+

    | @num |

    +------+

    | 100 |

    +------+

    解析:

    创建test1存储过程:输出的是num1变量的值,声明局部变量num2是int类型、默认值是100,用set将num2的值(未处理,则默认值)赋给num1;

    调用test1:用用户变量num去接收存储过程的输出值num1……

    默认值除了字面量,还可以是复杂的表达式,包括标量子查询

    例2:创建过程,使用所有球员的数量来初始化一个变量

    mysql>delimiter $$

    mysql> create procedure test2(out num1 int)->begin-> declare num2 int default(select count(*) fromPLAYERS);-> set num1=num2;->end$$mysql>delimiter ;

    mysql>call test2(@num);mysql> select@num;+------+

    | @num |

    +------+

    | 14 |

    +------+

    注意:MySQL不支持数组作为局部变量。

    3、局部变量的作用域:

    也就是变量能正常使用而不出错的程序块的范围。

    在嵌套块的情况下,

    在外部块中声明的变量可以在内部块中直接使用;

    在内部块中声明的变量只能在内部块中使用。

    4d642006509b50e8077cc4f4d4170260.png

    解析:变量v2只能用在内部块b2中,块b3中的set语句和最后一条set语句都是错误的。

    二、用户变量

    >用户变量与数据库连接有关:在当前连接中声明的变量,在连接断开的时候,就会消失;在此连接中声明的变量无法在另一连接中使用。

    >一个@符号表示的就是用户变量。

    1、用户变量的定义(set、select):

    1)set语句为用户变量赋值:

    可以使用“=”或“:=”作为分配符;

    分配给每个变量的expr可以为整数、实数、字符串或者NULL值;

    mysql> set @zjc:=999;

    mysql> select@zjc;+------+

    | @zjc |

    +------+

    | 999 |

    +------+

    2)select语句为用户变量赋值:

    分配符必须为“:=”而不能用“=”,因为在非SET语句中=被视为一个比较操作符;

    mysql> select @abc:=123;+-----------+

    | @abc:=123 |

    +-----------+

    | 123 |

    +-----------+mysql> select@abc;+------+

    | @abc |

    +------+

    | 123 |

    +------+

    注意:

    ①用户变量随处可以定义,随处可以使用;不定义可以直接使用(值默认为null)。

    ②用户变量的变量名的形式:@var_name,要有@符号。

    ③滥用用户变量会导致程序难以理解及管理。

    拓展之变量赋值:set语法

    MySQL里面的变量是不严格限制数据类型的,变量的数据类型根据赋给变量的值而随时变化。

    SET variable_assignment [, variable_assignment] ...

    variable_assignment:

    user_var_name=expr|[GLOBAL | SESSION] system_var_name =expr|[@@global. | @@session. | @@] system_var_name = expr

    ##用来给用户变量、系统变量赋值,也可以给过程中的局部变量赋值。

    注意:

    set系统变量时,不带作用域修饰,默认是指会话作用域;

    (特别注意,有些系统变量不带作用域修饰,无法设置,因此最好都带上作用域设置系统变量)。

    2、用户变量的作用域

    只要是在当前连接定义的用户变量,在当前连接里用都是OK的,除此之外都不行。

    3、与局部变量区别:

    局部变量只有变量名字,没有@符号;用户变量名前有@符号。

    都是先定义,再使用;未定义的变量,select值为空。

    局部变量只在存储过程内部使用,在过程体外是没有意义的,当begin-end块处理完后,局部变量就消失;而用户变量可以用在存储过程的内部和外部。

    Tips:在存储过程内部,使用局部变量,不要使用用户变量。

    三、MySQL变量之用户变量与系统变量

    1、用户变量如上所述@var_name(一个@符号)

    ①用户变量和数据库连接有关,连接后声明变量,连接断开后,自动消失;

    ②select一个没有赋值的用户变量,返回NULL,也就是没有值;

    Mysql的变量类似于动态语言,变量的值随所要赋的值的类型而改变。

    2、系统变量:根据系统变量的作用域分为:全局变量与会话变量(两个@符号)

    ①全局变量(@@global.)

    在MySQL启动的时候由服务器自动将全局变量初始化为默认值;

    全局变量的默认值可以通过更改MySQL配置文件(my.ini、my.cnf)来更改。

    ②会话变量(@@session.)

    在每次建立一个新的连接的时候,由MySQL来初始化;

    MYSQL会将当前所有全局变量的值复制一份来做为会话变量(也就是说,如果在建立会话以后,没有手动更改过会话变量与全局变量的值,那所有这些变量的值都是一样的)。

    #全局变量与会话变量的区别:对全局变量的修改会影响到整个服务器,但是对会话变量的修改,只会影响到当前的会话。

    展开全文
  • Sql语句创建 例如执行以上sql即可创建 2.Navicat中创建 第一步,函数右键 → 新建函数 第二步,填写存储过程名字,选择过程,点完成 第三步,定义存储过程 三、Mysql存储过程中输入参数 CREATE DEFINER=`root`@`%`...

    一、一个procedure实例

    实现循环更新一张表的排序号功能,有多少条数据,就从1排到几。

    DROP PROCEDURE IF EXISTS `update_old_sortnumber_procedure`; 
    CREATE DEFINER=`root`@`%` PROCEDURE `update_old_sortnumber_procedure`()
    BEGIN
        DECLARE countRow INT DEFAULT 0;
        DECLARE v_i INT DEFAULT 0;
        -- 查询数据条数,确定循环次数
        set @countRow = (select count(*) from test);
        -- 打印日志数据条数
        SELECT @countRow;
        -- 循环行更新
        WHILE v_i < @countRow DO
            SET @sqlStmt = CONCAT('UPDATE test SET sort_number=',v_i+1,' WHERE id IN (SELECT id FROM(select id from test LIMIT ',v_i,',1) aaa)');
            PREPARE stmt FROM @sqlStmt;
            EXECUTE stmt;
            SET v_i := v_i+1;
        END WHILE;
    END

     

    二、Mysql中定义存储过程

    1.全Sql语句创建

    例如执行以上sql即可创建

    2.Navicat中创建

    第一步,函数右键 → 新建函数

    第二步,填写存储过程名字,选择过程,点完成

    第三步,定义存储过程

     

    三、Mysql存储过程中输入参数

    CREATE DEFINER=`root`@`%` PROCEDURE `test_procedure`(in username varchar(250),in id INT)
    BEGIN
             -- 打印日志直接用select
             SELECT username;
             SELECT id;
    END

    运行

    输入参数

    执行结果

    总结:

    1. 传入参数用 in 变量名 变量类型
    2. 使用传入参数直接用参数名
    3. 打印日志直接用select

     

    四、Mysql存储过程中自定义参数
     

    CREATE DEFINER=`root`@`%` PROCEDURE `test_procedure`()
    BEGIN
             DECLARE countRow INT DEFAULT 2;
             -- 变量赋值
             set @countRow := countRow + 1;
             SELECT @countRow;
    END

    输出结果

     

    五、Mysql存储过程在SQL语句中嵌入参数

    -- 循环行更新
    WHILE v_i < @countRow DO
        SET @sqlStmt = CONCAT('UPDATE test SET sort_number=',v_i+1,' WHERE id IN (SELECT id FROM(select id from test LIMIT ',v_i,',1) aaa)');
        PREPARE stmt FROM @sqlStmt;
        EXECUTE stmt;
        SET v_i := v_i+1;
    END WHILE;

    总结:用concat拼接sql,执行语句执行sql

     

    六、Mysql存储过程中查询语句执行结果赋值给变量

    方式 1

    DECLARE cnt INT DEFAULT 0;
    select count(*) into cnt from test;
    select cnt;

    方式 2

    DECLARE cnt INT DEFAULT 0;
    set @cnt = (select count(*) from test);
    select @cnt;

    方式 3

    DECLARE cnt INT DEFAULT 0;
    select count(*) into @cnt from test;
    select @cnt;

    多个列的情况下似乎只能用 into 方式

    elect max(status), avg(status) into @max, @avg from test_tbl;
    select @max, @avg;

     

    更多学习和交流,请关注订阅号:猿事如此

    展开全文
  • 简单记录一下存储过程变量与赋值。 1.局部变量: 作用范围:用户自定义,在begin/end块中有效。 语法: 声明局部变量: declare var_name type [default var_value]; 举例:declare nickname varchar(32); eg: -...

    简单记录一下存储过程的变量与赋值。

    1.局部变量:
    作用范围:用户自定义,在begin/end块中有效。

    语法:
    声明局部变量: declare var_name type [default var_value];
    举例:declare nickname varchar(32);

    eg:

    -- set赋值
    delimiter $$
    create procedure sp_var01()
    begin
        declare nickname varchar(32) default 'unkown';
        set nickname = 'ZS';
        -- set nickname := 'SF';
        select nickname;
    end$$
    

    利用into进行赋值:

    -- into赋值
    delimiter $$
    create procedure sp_var_into()
    begin
        declare emp_name varchar(32) default 'unkown' ;
        declare emp_no int default 0;
        select e.empno,e.ename into emp_no,emp_name from emp e where e.empno = 7839;
        select emp_no,emp_name;
    end$$
    

    2.用户变量:
    作用范围: 用户自定义,当前会话(连接)有效.

    语法:
    @var_name
    不需要提前声明,使用即声明

    eg:

    -- 赋值
    delimiter $$
    create procedure sp_var02()
    begin
        set @nickname = 'ZS';
        -- set nickname := 'SF';
    end$$
    call sp_var02() $$
    select @nickname$$  --可以看到结果
    

    3.会话变量:
    作用范围: 由系统提供,当前会话(连接)有效。

    语法:
    @@session.var_name

    eg:

    show session variables; -- 查看会话变量
    select @@session.unique_checks; -- 查看某会话变量
    set @@session.unique_checks = 0; --修改会话变量
    

    4.全局变量:
    作用范围: 由系统提供,整个mysql服务器有效。

    语法:
    @@global.var_name

    eg:

    -- 查看全局变量中变量名有char的记录
    show global variables like '%char%'; 
    
    -- 查看全局变量character_set_client的值
    select @@global.character_set_client; 
    

    举例四种形式的变量之间相互赋值:

    -- 设置$$为结束符
    DELIMITER $$
    
    -- 指定使用数据库
    USE stores$$
    
    -- 判空
    DROP PROCEDURE IF EXISTS variable_define$$
    
    -- 创建存储过程
    CREATE PROCEDURE variable_define()
    BEGIN
    	-- 局部变量 在begin/end中有效
    	DECLARE limitQuota VARCHAR(24) DEFAULT '额度总控';
    	
    	-- 用户变量,当前会话有效
    	SET @user_variable = '用户变量';
    	
    	-- 会话变量,由系统提供,当前会话(连接)有效
    	SELECT @@session.unique_checks; -- 查看某会话变量
    	SET @@session.unique_checks = 0; -- 修改会话变量
    	
    	-- 全局变量,由系统提供,整个mysql服务器有效
    	SET @@global.character_set_client='test'; 
    	
    	-- 用set,将户变量赋值给局部变量,其它的就不举例子了
    	SET limitQuota=@user_variable;
    	SELECT limitQuota;
    	
    END$$
    
    DELIMITER ; -- 此语句可以缺省,将结束符置空,推荐置空写法
    
    -- 调用存储过程
    CALL variable_define();
    

    存储过程的输入输出请参看我的另一篇blog:存储过程的输入输出概述

    展开全文
  • 主要介绍了SQL Server存储过程中使用表值作为输入参数示例,使用表值参数,可以不必创建临时表或许多参数,即可向 Transact-SQL 语句或例程(如存储过程或函数)发送多行数据,这样可以省去很多自定义的代码,需要的朋友...
  • 存储过程和函数在实际项目中的使用2. 存储过程与函数的比较2.1. 共同点2.2. 不同点3. 变量定义和使用3.1. 变量定义3.1.1. 定义局部变量 declare3.1.2. 定义全局变量 set @3.1.3. 修改变量的值 set4. 存储过程 ...
  • 用户可以使用关键字DECLARE来定义变量,然后为变量赋值。这些变量的作用范围是在BEGIN…END程序段中。 1. 定义变量 在MySQL中,可以使用DECLARE关键字来定义变量定义变量的基本语法如下: DECLARE var_name[,…] ...
  • 2、@set定义的变量,叫做会话变量,也叫用户定义变量,在整个会话中都起作用(比如某个应用的一个连接过程中),即这个变量可以在被调用的存储过程或者代码之间共享数据。如何理解呢?可以看下面这个简单例子,很好...
  •  蓝色部分是定义取数据的地方,下面进行in删除。  不要直接用   set @orderscode=(  select a.orders_code   FROM   orders a  INNER JOIN orders_row b ON a.orders_code = b.ord
  • 1.定义变量,赋值,... -- 如果proc_first存在就删除create procedure proc_first()-- 创建存储过程begin-- 定义变量DECLARE age INT;-- 赋值set age = 23;select age;end;-- 执行call proc_first;1.定义变量,赋...
  • 创建一个 sub_track的存储过程实现: -- 创建一个 名为sub_track的存储过程 CREATE PROCEDURE sub_track() begin declare i int; -- 定义 循环变量i set @imei =0; -- 定义imei最后两位 set @t_count=0; -- 定义...
  • drop PROCEDURE if exists my_procedure; create PROCEDURE my_procedure() BEGIN declare my_sqll varchar(500);... 您可能感兴趣的文章:mysql 存储过程变量定义与赋值操作mysql存储过程详解mysq
  • sqlServer存储过程中,声明一个变量,但是没有赋值的情况下,其值默认为NULL 测试代码: create PROCEDURE [dbo].[test] AS BEGIN declare @testValue int print '声明@testValue 并不赋值' if(@testValue IS NULL)...
  • oracle存储过程----变量的介绍及使用(PL/SQL)

    万次阅读 多人点赞 2018-08-17 08:16:00
      关于存储过程变量有哪些 ,这样的问题,我在百度上搜索,却发现很多没用的,最近在同事那里,忽然看到一本《oracle从入门到精通》,搜了一下,发现了存储过程 的东西,但是它却没有直接叫存储过程 ,人家叫PL/...
  • 昨天我们讲了mysql存储过程创建修改与删除,下面我们这篇教程是讲关于mysql存储过程变量定义赋值操作哦。一、变量定义 mysql中变量定义用declare来定义一局部变量,该变量的使用范围只能在begin...end块中使用...
  • --定义变量 a numeric; 方式一: select sqla into a from table1 where b = '1' ; --这是sql语句赋值 方式二: sql1:= 'select a from table1 where b = ' '1' ' '; execute sql1 into a; --这是执行存储...
  • 1.表变量拥有特定作用域(在当前批处理语句中,但不在任何当前批处理语句调用的存储过程和函数中),表变量在批处理结束后自动被清除。 2.表变量较临时表产生更少的存储过程重编译。 3.针对表变量的事务仅仅在更新
  • 由于存储过程在创建时即在数据库服务器上进行了编译并存储在数据库中,所以存储过程运行要比单个的 SQL 语句块要快。 优点:模块化、性能、安全   创建存储过程 模板: CREATE PROCEDURE myStoredProcedure...
  • sqlserver定义变量和常量

    千次阅读 2020-07-25 20:08:10
    局部变量的名称是用户自定义的,命名的局部变量名要符合SQL Server 2000标识符命名规则,必须以@开头。 本实例在图书信息表中声明3个局部变量,分别为这3个变量赋值,并把它的值用print关键字显示出来。 在查询分析...
  • SQL存储过程、存储函数

    千次阅读 2021-11-25 11:03:15
    存储过程和函数是事先经过编译并存储在数据库中的一SQL语句的集合 存储过程和函数的好处: 存储过程和函数可以重复使用,减轻开发人员的工作量。类似于java中方法可以多次调用 减少网络流量,存储过程和函数位于...
  • 一.首先变量的声明有3中方式 ...注:存储过程中声明变量必须在begin之前 并且声明字符串时必须指定大小,不然会报错 2.使用%TYPE声明 ①格式:变量名 表名.字段名%TYPE ②含义:该变量的数据类型与指定...
  • SQL变量介绍和DECLARE定义局部变量

    千次阅读 2021-12-05 12:28:09
    一、变量的分类及特点 1、变量的分类总体可以分为两大类: 系统变量 和 用户自定义变量 系统变量:包括 全局变量 和 会话变量 自定义变量 : 包括 局部变量 和 用户用户变量 2、变量的特点: 1、系统变量的...
  • # 使用的navicat 编辑的存储过程CREATE DEFINER=`root`@`localhost` PROCEDURE `insert_student_back`()BEGIN#定义max变量DECLARE max INT DEFAULT 0;select max(id) into max from student_back;#判断是不是空值 是...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 225,029
精华内容 90,011
关键字:

sql存储过程定义变量