如何伪装如何成为一名作家前端

sqlyog写存储过程中的注意事项,坑死我了。。。mysql教程存储过程创建与注意事项第一 mysql存储过程跟之前写sqlserver 2005 的存储过程有点区别;第二,用的mysql第三方企业管理器 sqlyogent.exe 调试的时候,写存储过程和一般的查询语句要分开的,我是后来才意识到的,气得要命(可能也是用sqlserver 2005企业管理器的编辑器的习惯导致的)。 废话少说,写存储过程,要注意如下几点:第一 要定义delimiter //,意思是用//作为一段语句的结束符(这个很重要,我写的存储过程语法一点也没错,但是,就是通不过,原来分号:;分隔符是通知mysql客户端已经输入完成的符号,而我的存储过程里边很多都有分号;结果运行的时候,就是把我一段存储过程分成很多段执行)第二 如果你想我一样“不幸”选择了第三方mysql客户端sqlyogent.exe ,一定要在数据库教程目录里边的存储过程右键选择新建存储过程,然后在右边弹出的窗口里键入你的存储过程语句,在普通查询分析器输入无效,这是惨痛教训第三,如果存储过程的参数如果是输入中文的话,要在定义存储过程的后面加上character set gbk这个编码,不然调用存储过程使用中文参数的时候会出错,如:&create& procedure countpro(out a_out int,in b_date date, in unit_name varchar(45) character set gbk)第四,如果你的存储过程里边需要模糊查询,用到 like '%内容%' 不要在select 语句的where后边写'%';定义一个参数,用: set wherestr = &'%&+wherestr+&%'&;拼接语句第五,最后要还原结束符: 为;作为语句的结束符下面来看mysql存储过程实例1. 创建实例数据库&& create database db5;&& use db5;2.创建一个简单的工作表,并插入数据&& create table t(s1 int);&& insert into t values(5);3.创建程序实例 create procedure example&& create procedure p1() select *&&&&& sql语句存储过程的第一部分是 create procedure&&&&& 第二部分是过程名:上面新存储过程的名字是p1。&&&&& 第三部分书参数列表(),第四部分是程序的主体,“select * from t”*****什么样的mysql语句在存储过程体中是合法的?&&&&&& 在存储过程体中可以包含所有的合法sql数据库定义语言,insert,update,delete,drop,create,replace等等语句包括(set,commit,rollback)但是,在代码中如果包含mysql的扩充功能,那么代码将不能移植。&&&&4. 调用存储过程,所需要输入的就是call和你过程名以及一个括号。&&& call p1();5.过程中的特征子句&&& create procedure p2()language sql&&&&&&&&&&&&&&&&&&&&&&&&& not deterministic&&& sql security definer&&& comment ''&&&& select current_date,rand()6.parameters参数&&& create procedure p5()------; //参数列表是空的&&& create procedure p5([in] name data-type)---- //输入参数in可选,默认为参数为in&&& create procedure p5(out name data-type)----- //输出参数out&&& create procedure p5(inout 那么data-type)----- //即可以做输入参数也可以做输出参数&& ----输入参数in 例子。&&&&&& create procedure p5(p int) set @x=p;&&&&&& call p5(12345);&&&&&& select @x;&& ----输出参数out 例子&&&&&& create procedure p6(out p int)set p=-5;&&&&&& call p6(@y);&&&&&& select @y;7. 复合语句:如果你的过程中有多条语句,那么你需要begin/end块。在这里你可以进行变量的定义和流程的控制&&&&&& 首先执行命令 delimiter //&&&&&& create procedure p7()&&&&&&&&&& begin&&&&&&&&&&&&& set& @a=6;&&&&&& set& @b=5;&&&&&& insert into t values (@a);&&&&&& select s1 * @a from t where s1&= @b;&&&//&& -----在复合语句中申明变量&&&&&& create procedure p8()&&&&&&&&&&& begin&&&&&&&&&&&&&&&&&& set a=5;&&&&&& set b=5;&&&&&& insert into t values (a);&&&&&& select s1*a from t where s1&=b;&&&&&&&&&&&//&&&&&& 含有default默认语句舌设定语句的例子&&&&&& create procedure p9()&&&&&& begin&&&&&&&&& declare a ,b int default 5;&& insert into t values(a);&& select s1*a from t where s1&=b;&&&&&&//8. scope作用域的问题:内部的变量在其作用域范围内享有更高的优先权,当执行到end&&&&&&& 变量时,内部变量消失,此时已经在其作用域外,变量不再可见了,应为在存储&过程外再也不能找到这个申明的变量,但是你可以通过out参数或者将其值指派&给会话变量来保存其值。&& create procedure p11()&& begin&&&&&& declare x1 char(5) default 'outer';&&&&& begin&&&&&&& declare x1 char(5) default 'inner';&select x1;&&&&&&&&&& select x1;&&//&&&/*********************************& 存储过程中的条件式语句& ***************************************/1. if-then -else语句&&& create procedure p12(in parameter int)&&& begin&&&&&&&&&& set var=parameter+1;&&&&& if var=0 then&&&&&&& insert into t values(17);&&&&&&&&&& if parameter=0 then&&&&&&& update t set s1=s1+1;&&&&& else&&&&&&& update t set s1=s1+2;&&&&&&&&//2. case指令:如果需要进行更多条件真假的判断我们可以使用case语句&& create procedure p13(in parameter int)&&& begin&&&&&&&&&&&& set var=parameter+1;&&&&&& case var&&&&&&&& when 0 then insert into t values(17);& when 1 then insert into t values(18);& else insert into t values(19);&&&&&&&&&///*****************************& 循环语句& ************************************/1. while ···· 循环语句& create procedure p14()&& begin&&&&&&&& set var=0;&&&& while var&6 do&&&&&&& insert into t values(var);&set var=var+1;&&&&&&//2. repeat···· end repeat ;它在执行操作后检查结果,而while则是执行前进行检查& create procedure p15()&& begin&&&&&&&& set v=0;&&&& repeat&&&&&& insert into t values(v);&&&&&& set v=v+1;&&&&&& until v&=5&&&&&&//3. loop ····· loop 循环不需要初始条件,这点和while 循环相似,同时和repeat&&&&&& 循环一样不需要结束条件, leave语句的意义是离开循环,& create procedure p16()&& begin&&&&&&&&&& set v=0;&&&&& loop_lable:loop&&&&&&&& insert into t values(v);& set v=v+1;& if v &=5 then&&&& leave loop_&&&&&&&&//4. lables 标号:标号可以用在begin repeat while 或者loop 语句前,语句标号只能在&&&&& 合法的语句前面使用。可以跳出循环,使运行指令达到复合语句的最后一步。/*****************************& iterate迭代& ***************************************/1. iterate:通过引用复合语句的标号,来从新开始复合语句&&& create procedure p20()&&&&& begin&&&&&&&&set v=0;&loop_lable:loop&&&&&&&&& if v=3 then&&&&&& set v=v+1;&&&&& iterate loop_&&&& insert into t values(v);&& set v=v+1;&& if v&=5 then&&&& leave loop_&&&&&&&&//http://www.111cn.net/database/mysql/37088.htm
最新教程周点击榜
微信扫一扫2017年1月 其他数据库开发大版内专家分月排行榜第二2014年8月 其他数据库开发大版内专家分月排行榜第二2014年2月 其他数据库开发大版内专家分月排行榜第二2014年1月 其他数据库开发大版内专家分月排行榜第二2013年12月 其他数据库开发大版内专家分月排行榜第二2013年10月 其他数据库开发大版内专家分月排行榜第二2013年8月 其他数据库开发大版内专家分月排行榜第二2013年5月 其他数据库开发大版内专家分月排行榜第二2013年1月 其他数据库开发大版内专家分月排行榜第二2012年8月 其他数据库开发大版内专家分月排行榜第二2012年5月 其他数据库开发大版内专家分月排行榜第二2012年4月 其他数据库开发大版内专家分月排行榜第二2012年1月 其他数据库开发大版内专家分月排行榜第二
2017年5月 其他数据库开发大版内专家分月排行榜第三2017年3月 其他数据库开发大版内专家分月排行榜第三2016年12月 其他数据库开发大版内专家分月排行榜第三2014年11月 其他数据库开发大版内专家分月排行榜第三2014年7月 其他数据库开发大版内专家分月排行榜第三2014年6月 其他数据库开发大版内专家分月排行榜第三2014年5月 其他数据库开发大版内专家分月排行榜第三2013年7月 其他数据库开发大版内专家分月排行榜第三2013年3月 其他数据库开发大版内专家分月排行榜第三2012年7月 其他数据库开发大版内专家分月排行榜第三2012年6月 其他数据库开发大版内专家分月排行榜第三2011年12月 其他数据库开发大版内专家分月排行榜第三
本帖子已过去太久远了,不再提供回复功能。2559人阅读
MySql(2)
sqlyog写存储过程中的注意事项,坑死我了。。。
创建与注意事项
第一 mysql存储过程跟之前写sqlserver 2005 的存储过程有点区别;
第二,用的mysql第三方企业管理器 sqlyogent.exe 调试的时候,写存储过程和一般的查询语句要分开的,我是后来才意识到的,气得要命(可能也是用sqlserver 2005企业管理器的编辑器的习惯导致的)。 废话少说,写存储过程,要注意如下几点:
第一 要定义delimiter //,意思是用//作为一段语句的结束符(这个很重要,我写的存储过程语法一点也没错,但是,就是通不过,原来分号:;分隔符是通知mysql客户端已经输入完成的符号,而我的存储过程里边很多都有分号;结果运行的时候,就是把我一段存储过程分成很多段执行)
第二 如果你想我一样“不幸”选择了第三方mysql客户端sqlyogent.exe ,一定要在目录里边的存储过程右键选择新建存储过程,然后在右边弹出的窗口里键入你的存储过程语句,在普通查询分析器输入无效,这是惨痛教训
第三,如果存储过程的参数如果是输入中文的话,要在定义存储过程的后面加上character set gbk这个编码,不然调用存储过程使用中文参数的时候会出错,如:
create& procedure countpro(out a_out int,in b_date date, in unit_name varchar(45) character set gbk)
第四,如果你的存储过程里边需要模糊查询,用到 like '%内容%' 不要在select 语句的where后边写'%';定义一个参数,用: set wherestr = &'%&+wherestr+&%'&;拼接语句第五,最后要还原结束符: 为;作为语句的结束符
下面来看mysql存储过程实例
1. 创建实例数据库
&& create database db5;
&& use db5;
2.创建一个简单的工作表,并插入数据
&& create table t(s1 int);
&& insert into t values(5);
3.创建程序实例 create procedure example
&& create procedure p1() select *
&&&&& sql语句存储过程的第一部分是 create procedure
&&&&& 第二部分是过程名:上面新存储过程的名字是p1。
&&&&& 第三部分书参数列表(),第四部分是程序的主体,“select * from t”
*****什么样的mysql语句在存储过程体中是合法的?
&&&&&& 在存储过程体中可以包含所有的合法sql数据库定义语言,insert,update,delete,drop,create,replace等等语句
包括(set,commit,rollback)但是,在代码中如果包含mysql的扩充功能,那么代码将不能移植。
4. 调用存储过程,所需要输入的就是call和你过程名以及一个括号。
&&& call p1();
5.过程中的特征子句
&&& create procedure p2()language sql&
&&&&&&&&&&&&&&&&&&&&&&&& not deterministic
&&& sql security definer
&&& comment ''
&&&& select current_date,rand()
6.parameters参数
&&& create procedure p5()------; //参数列表是空的
&&& create procedure p5([in] name data-type)---- //输入参数in可选,默认为参数为in
&&& create procedure p5(out name data-type)----- //输出参数out
&&& create procedure p5(inout 那么data-type)----- //即可以做输入参数也可以做输出参数
&& ----输入参数in 例子。
&&&&&& create procedure p5(p int) set @x=p;
&&&&&& call p5(12345);
&&&&&& select @x;
&& ----输出参数out 例子
&&&&&& create procedure p6(out p int)set p=-5;
&&&&&& call p6(@y);
&&&&&& select @y;
7. 复合语句:如果你的过程中有多条语句,那么你需要begin/end块。在这里你可以进行变量的定义和流程的控制
&&&&&& 首先执行命令 delimiter //
&&&&&& create procedure p7()
&&&&&&&&&& begin
&&&&&&&&&&&&& set& @a=6;
&&&&&& set& @b=5;
&&&&&& insert into t values (@a);
&&&&&& select s1 * @a from t where s1&= @b;
&& -----在复合语句中申明变量
&&&&&& create procedure p8()
&&&&&&&&&&& begin
&&&&&& set a=5;
&&&&&& set b=5;
&&&&&& insert into t values (a);
&&&&&& select s1*a from t where s1&=b;
&&&&&&&&&&&//
&&&&&& 含有default默认语句舌设定语句的例子
&&&&&& create procedure p9()
&&&&&& begin
&&&&&&&&& declare a ,b int default 5;
&& insert into t values(a);
&& select s1*a from t where s1&=b;
8. scope作用域的问题:内部的变量在其作用域范围内享有更高的优先权,当执行到end
&&&&&&& 变量时,内部变量消失,此时已经在其作用域外,变量不再可见了,应为在存储
&过程外再也不能找到这个申明的变量,但是你可以通过out参数或者将其值指派
&给会话变量来保存其值。
&& create procedure p11()
&&&&& declare x1 char(5) default 'outer';
&&&&& begin
&&&&&&& declare x1 char(5) default 'inner';
&select x1;
&&&&& select x1;
/*********************************& 存储过程中的条件式语句& ***************************************/
1. if-then -else语句
&&& create procedure p12(in parameter int)
&&&&& set var=parameter+1;
&&&&& if var=0 then
&&&&&&& insert into t values(17);
&&&&& if parameter=0 then
&&&&&&& update t set s1=s1+1;
&&&&& else
&&&&&&& update t set s1=s1+2;
2. case指令:如果需要进行更多条件真假的判断我们可以使用case语句
&& create procedure p13(in parameter int)
&&&&&& set var=parameter+1;
&&&&&& case var
&&&&&&&& when 0 then insert into t values(17);
& when 1 then insert into t values(18);
& else insert into t values(19);
/*****************************& 循环语句& ************************************/
1. while ···· 循环语句
& create procedure p14()
&&&& set var=0;
&&&& while var&6 do
&&&&&&& insert into t values(var);
&set var=var+1;
2. repeat···· end repeat ;它在执行操作后检查结果,而while则是执行前进行检查
& create procedure p15()
&&&& set v=0;
&&&& repeat
&&&&&& insert into t values(v);
&&&&&& set v=v+1;
&&&&&& until v&=5
3. loop ····· loop 循环不需要初始条件,这点和while 循环相似,同时和repeat
&&&&&& 循环一样不需要结束条件, leave语句的意义是离开循环,
& create procedure p16()
&&&&& set v=0;
&&&&& loop_lable:loop
&&&&&&&& insert into t values(v);
& set v=v+1;
& if v &=5 then
&&&& leave loop_
4. lables 标号:标号可以用在begin repeat while 或者loop 语句前,语句标号只能在
&&&&& 合法的语句前面使用。可以跳出循环,使运行指令达到复合语句的最后一步。
/*****************************& iterate迭代& ***************************************/
1. iterate:通过引用复合语句的标号,来从新开始复合语句
&&& create procedure p20()
&&&&& begin
&loop_lable:loop
&&&&&&&&& if v=3 then&
&&&&& set v=v+1;
&&&&& iterate loop_
&& insert into t values(v);
&& set v=v+1;
&& if v&=5 then
&&&& leave loop_
http://www.111cn.net/database/mysql/37088.htm
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:10571次
排名:千里之外
原创:35篇
转载:10篇
(15)(4)(9)(4)(6)(6)(1)

我要回帖

更多关于 如何成为一名基金经理 的文章

 

随机推荐