MySQL 创建存储过程Word下载.docx

上传人:b****8 文档编号:22573481 上传时间:2023-02-04 格式:DOCX 页数:21 大小:19.98KB
下载 相关 举报
MySQL 创建存储过程Word下载.docx_第1页
第1页 / 共21页
MySQL 创建存储过程Word下载.docx_第2页
第2页 / 共21页
MySQL 创建存储过程Word下载.docx_第3页
第3页 / 共21页
MySQL 创建存储过程Word下载.docx_第4页
第4页 / 共21页
MySQL 创建存储过程Word下载.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

MySQL 创建存储过程Word下载.docx

《MySQL 创建存储过程Word下载.docx》由会员分享,可在线阅读,更多相关《MySQL 创建存储过程Word下载.docx(21页珍藏版)》请在冰豆网上搜索。

MySQL 创建存储过程Word下载.docx

习惯上,对于是“in”的参数,我们都不会显式指定。

1.MySQL存储过程名字后面的“()”是必须的,即使没有一个参数,也需要“()”

2.MySQL存储过程参数,不能在参数名称前加“@”,如:

“@aint”。

下面的创建存

储过程语法在MySQL中是错误的(在SQLServer中是正确的)。

MySQL存储过程中

的变量,不需要在变量名字前加“@”,虽然MySQL客户端用户变量要加个“@”。

@aint,-错误

bint 

-正确

3.MySQL存储过程的参数不能指定默认值。

4.MySQL存储过程不需要在procedurebody前面加“as”。

而SQLServer存储过

程必须加“as”关键字。

as 

-错误,MySQL不需要“as”

mysqlstatement...;

5.如果MySQL存储过程中包含多条MySQL语句,则需要beginend关键字。

mysqlstatement1...;

mysqlstatement2...;

6.MySQL存储过程中的每条语句的末尾,都要加上分号“;

...

7.MySQL存储过程中的注释。

这是个

多行MySQL注释。

-这是单行MySQL注释(注意-后至少要有一个空格)

ifaisnullthen这也是个单行MySQL注释

8.不能在MySQL存储过程中使用“return”关键字。

9.调用MySQL存储过程时候,需要在过程名字后面加“()”,即使没有一个参数,也

需要“()”

callpr_no_param();

10.因为MySQL存储过程参数没有默认值,所以在调用MySQL存储过程时候,不能省

略参数。

可以用null来替代。

callpr_add(10,null);

mysql5.0存储过程学习总结

一.创建存储过程

1.基本语法:

createproceduresp_name()

………

end

2.参数传递

二.调用存储过程

callsp_name()

注意:

存储过程名称后面必须加括号,哪怕该存储过程没有参数传递

三.删除存储过程

dropproceduresp_name//

2.注意事项

(1)不能在一个存储过程中删除另一个存储过程,只能调用另一个存储过程

四.区块,条件,循环

1.区块定义,常用

……

也可以给区块起别名,如:

lable:

………..

endlable;

可以用leavelable;

跳出区块,执行区块以后的代码

2.条件语句

if条件then

statement

else

endif;

3.循环语句

(1).while循环

[label:

]WHILEexpressionDO

statements

ENDWHILE[label];

(2).loop循环

]LOOP

ENDLOOP[label];

(3).repeatuntil循环

]REPEAT

UNTILexpression

ENDREPEAT[label];

五.其他常用命令

1.showprocedurestatus

显示数据库中所有存储的存储过程基本信息,包括所属数据库,存储过程名称,创建时

间等

2.showcreateproceduresp_name

显示某一个存储过程的详细信息

mysql存储过程中要用到的运算符

mysql存储过程学习总结-操作符

算术运算符

加 

SETvar1=2+2;

4

减 

SETvar2=3-2;

1

乘 

SETvar3=3*2;

6

除 

SETvar4=10/3;

3.3333

DIV 

整除SETvar5=10DIV3;

3

取模SETvar6=10%3;

比较运算符

>

大于1>

2False

<

小于2<

1False

小于等于2<

=2True

大于等于3>

BETWEEN 

在两值之间5BETWEEN1AND10True

NOTBETWEEN 

不在两值之间5NOTBETWEEN1AND10False

IN 

在集合中5IN(1,2,3,4)False

NOTIN 

不在集合中5NOTIN(1,2,3,4)True

等于2=3False

!

不等于2<

3False

=>

严格比较两个NULL值是否相等NULL<

NULLTrue

LIKE 

简单模式匹配"

GuyHarrison"

LIKE"

Guy%"

True

REGEXP 

正则式匹配"

REGEXP"

[Gg]reg"

False

ISNULL 

为空0ISNULLFalse

ISNOTNULL 

不为空0ISNOTNULLTrue

逻辑运算符

与(AND)

AND

TRUE

FALSE

NULL

或(OR)

OR

异或(XOR)

XOR

位运算符

位或

&

位与

左移位

右移位

位非(单目运算,按位取反)

mysq存储过程中常用的函数,字符串类型操作,数学类,日期时间类。

mysql存储过程基本函数

一.字符串类

CHARSET(str)//返回字串字符集

CONCAT(string2 

[,...])//连接字串

INSTR(string,substring)//返回substring首次在string中出现的位置,不存在返

回0

LCASE(string2)//转换成小写

LEFT(string2,length)//从string2中的左边起取length个字符

LENGTH(string)//string长度

LOAD_FILE(file_name)//从文件读取内容

LOCATE(substring,string 

[,start_position])同INSTR,但可指定开始位置

LPAD(string2,length,pad)//重复用pad加在string开头,直到字串长度为length

LTRIM(string2)//去除前端空格

REPEAT(string2,count)//重复count次

REPLACE(str,search_str,replace_str)//在str中用replace_str替换search_str

RPAD(string2,length,pad)//在str后用pad补充,直到长度为length

RTRIM(string2)//去除后端空格

STRCMP(string1,string2)//逐字符比较两字串大小,

SUBSTRING(str,position 

[,length])//从str的position开始,取length个字符,

注:

mysql中处理字符串时,默认第一个字符下标为1,即参数position必须大于等于1

mysql>

selectsubstring(’abcd’,0,2);

+———————–+

|substring(’abcd’,0,2)|

|

1rowinset(0.00sec)

selectsubstring(’abcd’,1,2);

|substring(’abcd’,1,2)|

|ab 

1rowinset(0.02sec)

TRIM([[BOTH|LEADING|TRAILING][padding]FROM]string2)//去除指定位置的指定字

UCASE(string2)//转换成大写

RIGHT(string2,length)//取string2最后length个字符

SPACE(count)//生成count个空格

二.数学类

ABS(number2)//绝对值

BIN(decimal_number)//十进制转二进制

CEILING(number2)//向上取整

CONV(number2,from_base,to_base)//进制转换

FLOOR(number2)//向下取整

FORMAT(number,decimal_places)//保留小数位数

HEX(DecimalNumber)//转十六进制

HEX()中可传入字符串,则返回其ASC-11码,如HEX(’DEF’)返回4142143

也可以传入十进制整数,返回其十六进制编码,如HEX(25)返回19

LEAST(number,number2 

[,..])//求最小值

MOD(numerator,denominator)//求余

POWER(number,power)//求指数

RAND([seed])//随机数

ROUND(number 

[,decimals])//四舍五入,decimals为小数位数]

返回类型并非均为整数,如:

(1)默认变为整形值

selectround(1.23);

+————-+

|round(1.23)|

1|

selectround(1.56);

|round(1.56)|

2|

(2)可以设定小数位数,返回浮点型数据

selectround(1.567,2);

+—————-+

|round(1.567,2)|

1.57|

SIGN(number2)//返回符号,正负或0

SQRT(number2)//开平方

三.日期时间类

ADDTIME(date2,time_interval)//将time_interval加到date2

CONVERT_TZ(datetime2,fromTZ,toTZ)//转换时区

CURRENT_DATE( 

)//当前日期

CURRENT_TIME( 

)//当前时间

CURRENT_TIMESTAMP( 

)//当前时间戳

DATE(datetime)//返回datetime的日期部分

DATE_ADD(date2,INTERVALd_valued_type)//在date2中加上日期或时间

DATE_FORMAT(datetime,FormatCodes)//使用formatcodes格式显示datetime

DATE_SUB(date2,INTERVALd_valued_type)//在date2上减去一个时间

DATEDIFF(date1,date2)//两个日期差

DAY(date)//返回日期的天

DAYNAME(date)//英文星期

DAYOFWEEK(date)//星期(1-7),1为星期天

DAYOFYEAR(date)//一年中的第几天

EXTRACT(interval_name 

FROMdate)//从date中提取日期的指定部分

MAKEDATE(year,day)//给出年及年中的第几天,生成日期串

MAKETIME(hour,minute,second)//生成时间串

MONTHNAME(date)//英文月份名

NOW( 

SEC_TO_TIME(seconds)//秒数转成时间

STR_TO_DATE(string,format)//字串转成时间,以format格式显示

TIMEDIFF(datetime1,datetime2)//两个时间差

TIME_TO_SEC(time)//时间转秒数]

WEEK(date_time[,start_of_week])//第几周

YEAR(datetime)//年份

DAYOFMONTH(datetime)//月的第几天

HOUR(datetime)//小时

LAST_DAY(date)//date的月的最后日期

MICROSECOND(datetime)//微秒

MONTH(datetime)//月

MINUTE(datetime)//分

附:

可用在INTERVAL中的类型

DAY,DAY_HOUR,DAY_MINUTE,DAY_SECOND,HOUR,HOUR_MINUTE,HOUR_SECOND

MySQL存储过程例子,包含事务,参数,嵌套调用,游标,循环等

viewplaincopytoclipboardprint?

dropprocedureifexistspro_rep_shadow_rs;

delimiter| 

---------------------------------- 

--rep_shadow_rs 

--用来处理信息的增加,更新和删除 

--每次只更新上次以来没有做过的数据 

--根据不同的标志位 

--需要一个输出的参数, 

--如果返回为0,则调用失败,事务回滚 

--如果返回为1,调用成功,事务提交 

-- 

--测试方法 

--callpro_rep_shadow_rs(@rtn);

--select@rtn;

createprocedurepro_rep_shadow_rs(outrtnint) 

begin 

--声明变量,所有的声明必须在非声明的语句前面 

declareiLast_rep_sync_idintdefault-1;

declareiMax_rep_sync_idintdefault-1;

--如果出现异常,或自动处理并rollback,但不再通知调用方了 

--如果希望应用获得异常,需要将下面这一句,以及启动事务和提交事务的语句

全部去掉 

declareexithandlerforsqlexceptionrollback;

--查找上一次的 

selecteidintoiLast_rep_sync_idfromrep_de_proc_logwhere

tbl='

rep_shadow_rs'

;

--如果不存在,则增加一行 

ifiLast_rep_sync_id=-1then 

insertintorep_de_proc_log(rid,eid,tbl)values(0,0,'

);

setiLast_rep_sync_id=0;

--下一个数字 

setiLast_rep_sync_id=iLast_rep_sync_id+1;

--设置默认的返回值为0:

失败 

setrtn=0;

--启动事务 

starttransaction;

--查找最大编号 

selectmax(rep_sync_id)intoiMax_rep_sync_idfromrep_shadow_rs;

--有新数据 

ifiMax_rep_sync_id>

=iLast_rep_sync_idthen 

--调用 

callpro_rep_shadow_rs_do(iLast_rep_sync_id,iMax_rep_sync_id);

--更新日志 

updaterep_de_proc_logset

rid=iLast_rep_sync_id,eid=iMax_rep_sync_idwheretbl='

--运行没有异常,提交事务 

commit;

--设置返回值为1 

setrtn=1;

delimiter;

dropprocedureifexistspro_rep_shadow_rs_do;

--------------------------------- 

--处理指定编号范围内的数据 

--需要输入2个参数 

--last_rep_sync_id是编号的最小值 

--max_rep_sync_id是编号的最大值 

--无返回值 

createprocedurepro_rep_shadow_rs_do(last_rep_sync_idint,max_rep_sync_id

int) 

declareiRep_operationtypevarchar

(1);

declareiRep_statusvarchar

(1);

declareiRep_Sync_idint;

declareiIdint;

--这个用于处理游标到达最后一行的情况 

declarestopintdefault0;

--声明游标 

declarecurcursorforselect

id,Rep

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 职业教育 > 职业技术培训

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1