存储过程中变量
① 存储过程中如何定义一个变量
存储过程常见的变量:局部变量、用户变量、系统变量
用select...into语句。
这个SELECT语法把选定的列直接存储到变量。因此,只有单一的行可以被取回。
重要:
SQL变量名不能和列名一样。如果SELECT ... INTO这样的SQL语句包含一个对列的参考,并包含一个与列相同名字的局部变量,MySQL当前把参考解释为一个变量的名字。例如,在下面的语句中,xname 被解释为到xname variable 的参考而不是到xname column的:
CREATE PROCEDURE sp1 (x VARCHAR(5)) BEGIN DECLARE xname VARCHAR(5) DEFAULT 'bob'; DECLARE newname VARCHAR(5); DECLARE xid INT; SELECT xname,id INTO newname,xid FROM table1 WHERE xname = xname; SELECT newname; END;
当这个程序被调用的时候,无论table.xname列的值是什么,变量newname将返回值‘bob’。
③ 存储过程中变量的使用以及如何构造有单引号的Sql语句
--下面写的这个存储过程,功能是接收一个品种参数,根据这个参数查询符合条件的记录,并将这些记录插入到另一个表中,然后从这个表中查出数据,最后删除这个表。 create procere [dbo].[ceshi] @m as varchar(50) set @sql='insert into dbo.TempAVPrice (HQ_time,OpenPrice,HighPrice,LowPrice,ClosePrice,Hold_Vol,Accept_Vol,Accept_Money,AVPrice,UnUsed) select HQ_time,OpenPrice,HighPrice,LowPrice,ClosePrice,Hold_Vol,Accept_Vol,Accept_Money,AVPrice,UnUsed from dbo.TempPriceList where alisa like''' +@m+'%'''
④ 存储过程的变量指什么
存储过程是面向对象的数据库编程语言,与其他面向对象编程语言类似,可声明变量,用变量来存取某一类值,变量在存储过程中占有非常重要的位置。变量声明在MySQL语言的存储过程中,变量有会话变量、存储过程变量两种。两种变量的声明方式不同,作用场景也不尽相同,在实际使用中要根据需要加以选择。
1.变量种类((1)会话变量会话变量也称用户变量,可以在一个客户端会话的任何地方声明,作用域是整个会话,会话断开后,会话变量也就消失。会话变量名以@开头,使用set直接赋值,在一个会话内,会话变量只需初始化一次。
例如,Set@num=1;表示声明了一个名字叫“@num”的会话变量,其初始值为1。
(2)存储过程变量存储过程变量以DECLARE为关键字声明的变量,只能在存储过程中使用,其命名不需要以@开头。以DECLARE声明的变量都会被初始化为NULL,存储过程变量存在于数据库服务器上。2.变量定义存储过程变量定义格式:DECLARE+变量名+数据类型+[DEFAULTVALUE]其中,((1)DECLARE为声明存储过程变量的关键字;
(2)变量名可以任意,但尽可能达到能表意的目的;
(3)数据类型为MySQL的数据类型,如int
⑤ 浅谈MySQL存储过程中declare和set定义变量的区别
在存储过程中常看到declare定义的变量和@set定义的变量。简单的来说,declare定义的类似是局部变量,@set定义的类似全局变量。
1、declare定义的变量类似java类中的局部变量,仅在类中生效。即只在存储过程中的begin和end之间生效。
2、@set定义的变量,叫做会话变量,也叫用户定义变量,在整个会话中都起作用(比如某个应用的一个连接过程中),即这个变量可以在被调用的存储过程或者代码之间共享数据。如何理解呢?可以看下面这个简单例子,很好理解。
(1)先执行下面脚本,创建一个存储过程,分别有declare形式的变量和@set形式的变量
DROP PROCEDURE IF EXISTS temp;
DELIMITER //CREATE PROCEDURE temp()BEGIN
DECLARE a INT DEFAULT 1; SET a=a+1; SET @b=@b+1; SELECT a,@b;END//DELIMITER ;
(2)接着为b变量初始化。
SET @b=1;
(3)然后重复调用这个存储过程。
CALL temp();
(4)会发现a的值不改变,而b的值会一直增加。
所以,总结起来就是开头那句话,declare定义的类似是局部变量,@set定义的类似全局变量。
⑥ sql2005存储过程中变量的使用
@yf在你的存储过程中是定义了,但是在@sql中没有定义,当你执行@sql的时候,外面定义的变量在里面是无效的。给你3点建议。
1. 能不用动态sql尽量不要用,因为系统没法给你预先确定执行计划,所以动态sql是不高效的。
2. 既然你用了动态sql,那么复杂的判断逻辑就不要放在 @sql 里面了。而是放在外面。
3. 外面定义的@yf,是一个变量,如果直接用在@sql那就不是变量,而仅仅是一个符号,所以只可以用 @sql = @sql + @yf的方式使用,不可以在里面直接用。当然还要注意单引号。
4. 临时表不是表变量,用完记得删除。 如果涉及到的数据不是特别多,建议你用表变量效率更高。declare @test001 table (a_yf int,a_dwbh int)
⑦ 存储过程中日期的变量是什么
DATE。存储过程引导数据时,通常使用时间字段(时间戳)洞掘来确定是否需要更新,存储洞慧过程中的变量定义为DATE,则Oracle会根据变量DATE自动将数据表中的时间字段转换为日期类型,并截取时间信息,但是,要导入的数据一天要更新多纳颤答次,并且实时性要求较高,因此必须精确到秒。从变量的作用域(即从空间)的角度来观察,变量可以分为全局变量和局部变量。变量的存储有两种不同的方式:静态存储方式和动态存储方式。
⑧ SQL 存储过程变量
整个语句块创建了一个存储过程,其中的查询使用了存储过程的参数。你可以通过直接执行存储过程,将值传给传出过程的参数,来实现执行查询。
例如:
execute dbo].[p_sele_sp] '%a%','1%',‘aaa%’,'bbb%';
如果希望直接执行查询语句,则需要用declare关键字事先声明变量。如下:
-- 声明变量
declare @spbh varchar(20) , @zjm varchar(100) , @sptm varchar(20) , @splb varchar(20)
-- 给变量赋值
set @spbh = ’%a%'
set @zjm = '1%'
set @sptm = ‘aaa%’
set @splb = 'bbb%'
--执行查询
SELECT TOP 200 spbh,spname,dw,spgg,scqy,spcd,sl,lsj,zdsj,spid,splb,jj,
sptm,spsx,kfid,jx,pzwh,is_sy,jbz,zbz,ajia,bjia,cjia,djia,bz,bz1,bz2,bz3,bz4,bz5,bz6,bz7,bz8,bz9
FROM t_sp_info
WHERE ( status = '是' ) AND
( pym like @zjm OR spname like @zjm OR spbh like @spbh OR sptm like @sptm ) AND ( splb like @splb )