存储过程与自定义函数_第1页
存储过程与自定义函数_第2页
存储过程与自定义函数_第3页
存储过程与自定义函数_第4页
存储过程与自定义函数_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

存储过程——概述

公众账号:InsideMySQL

存储在数据库端的一组SQL语句集

用户可以通过存储过程名和传参多次调用的程序模块

存储过程的特点:

使用灵活,可以使用流控制语句、自定义变量等完成复杂的业务逻辑

提高数据安全性,屏蔽应用程序直接对表的操作,易于进行审计

减少网络传输

提高代码维护的复杂度,实际使用中要评估场景是否适合

存储过程-流控制语言 公众账号:InsideMySQL

流控制

描述

IFsearch_conditionTHENstatement_list

IF

[ELSEIFsearch_conditionTHENstatement_list][ELSEstatement_list]

ENDIF

CASEcase_value

CASE

WHENwhen_valueTHENstatement_list

[ELSEstatement_list]ENDCASE

WHILE

WHILEsearch_conditionDOstatement_listENDWHILE

REPEAT

REPEATstatement_list

UNTILsearch_conditionENDREPEAT

存储过程-基本语法

CREATE

[DEFINER={user|CURRENT_USER}]

PROCEDUREsp_name([proc_parameter[,...]])

[characteristic...]routine_body

proc_parameter:

[IN|OUT|INOUT]param_nametypetype:

AnyvalidMySQLdatatype

characteristic:

COMMENT'string'

|[NOT]DETERMINISTIC

routine_body:

ValidSQLroutinestatement

公众账号:InsideMySQL

存储过程-示例与调用 公众账号:InsideMySQL

CREATEPROCEDUREproc_test1(INtotalINT,OUTresINT)BEGIN

mysql>set@total=10;

QueryOK,0rowsaffected

DECLAREiINT;SETi=1;

SETres=1;

IFtotal<=0THEN

SETtotal=1;

mysql>set@res=1;

QueryOK,0rowsaffected

mysql>callproc_test1(@total,@res);

QueryOK,1rowaffected

END;

ENDIF;

WHILEi<=totalDO

SETres=res*i;

INSERTINTOtbl_proc_test(num)VALUES(res);SETi=i+1;

ENDWHILE;

mysql>select@res;

+ +

|@res |

+ +

|3628800|

+ +

1rowinset

与存储过程非常类似

但是必须带有返回值

与内置的SUM(),MAX()等MySQL原生函数使用方法类似

SELECTfunc(val);

SELECT*fromtblwherecol=func(val);

自定义函数可能在遍历每条记录中使用

注意性能损耗

自定义函数 公众账号:InsideMySQL

自定义函数——基本语法

CREATE

[DEFINER={user|CURRENT_USER}]

FUNCTIONsp_name([func_parameter[,...]])

RETURNStype

[characteristic...]routine_bodyfunc_parameter:

param_nametypetype:

AnyvalidMySQLdatatype

characteristic:

COMMENT'string'

|[NOT]DETERMINISTIC

routine_body:

ValidSQLroutinestatement

公众账号:InsideMySQL

自定义函数——示例与调用 公众账号:InsideMySQL

CREATEFUNCTIONfunc_test1(totalINT)RETURNSINT

BEGIN

DECLAREiINT;DECLAREresINT;SETi=1;

SETres=1;

IFtotal<=0THEN

SETtotal=1;

mysql>selectfunc_test1(4);

+ +

|func_test1(4)|

+ +

| 24|

+ +

1rowinset

END;

ENDIF;WHILEi<=

total

DO

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论