SQL--存储过程&存储函数

mac2022-06-30  228

 

                                                 什么是存储过程?


       是一组为了完成特定功能的SQL语句集。经过编译存储在数据库中。  存储过程包括程序流,逻辑以及对数据库的查询。可以接受参数,输出参数,返回单个或多个结果集以及返回值

                                              为什么使用存储过程?

                                                  存储过程种类:


  *用户自定义存储过程

  *系统存储过程

  *扩展存储过程

                                                 存储过程好处:


  1.增强SQL语言的功能和灵活性

  2.良好的封装性

  3.减少网络流量

  4.高性能

  5.作为安全机制保护数据库的安全性和数据完整性

                                                 创建存储过程:


语法格式:

Create proc[edure]procedure_name[;number] [{@parameter data_type} [VARYING][=DEFAULT][OUTPUT][,…N] [WITH {RECOMPILE(不缓存执行计划)|ENCRYPTION(对文档进行加密)|RECOMPILE,ENCRYPTION}] AS Sql_statement[…n] ]

 

   使用带默认值的参数:

 

   使用输出函数:

   Output  获取储存过程的返回结果

 

                                        存储过程实例:


   实现过程复杂的工程

   修改存储实例:右键--修改命令(会有格式)

ALTER PROCEFUCE procedure_name[;number](修改存储过程名称) [{@parameter data_type} [VARYING][=default][output](参数列表) [,…n] [WITH {RECOMPILE | ENCRYPTION |RECIMPILE,ENCRYPTION}](属性) [FOR REPLICATION] AS Sql_atatement[,…n]

 

 

                                                  删除存储过程:


两种方式:

   T -SQL

   语法格式:DROP PROCEDURE{procedure}[,…n]

 

   命令菜单手动

   点击存储过程-删除命令弹出删除对象窗口-删除

 

 

                                          设计存储过程的规则:


   1.可以引用在同一存储过程中创建的对象,只要引用时创建即可

   2.在存储过程中引用临时表,在存储过程创建临时表,只为改存储过程存在,退出了存储过程,则临时表消失

   3.在调用存储过程时,被调用的额存储过程课访问第一个存储过程的对象,包含临时表

   4.不能回滚对执行远程MSQLSever2008进行更改的存储过程,不参与事务处理

   5.参数最大数目为2100

   6.局部变量的最大数目受内存限制

   7.存储过最大为128MB

                                                   注意事项:


 

系统存储过程:

   使用存储过程:

   Exec sp_who sa

   Exec sp_helpdb +数据库  如果不加就会加载出所有的

   Exec sp_monitor 会显示统计信息

 

   临时存储过程:

 

   和创建临时表一样

   #本地临时

   ##全局临时

   嵌套存储过程:

 

 

                                              查看存储过程:


    Exec sp_helptext + 名称

                                            扩展:存储过程体


   1.局部变量:用来存储存储过程体中的临时结果DECLARE

   局部变量注意事项:只能在存储过程体的BEGIN…END 语句块声明

   在过程体的开头处声明

   局部变量没有@符号    用户变量使用1个@符号   系统变量2个@符号

   2.SET语句   为局部变量赋值

   3.select…INTO  返回的结果集只能有一条

                                          4.流程控制语句:


   条件判断:IF …THEN …ELSE 和CASE

   循环语句:LOOP  REPEAT  WHILE

                                        扩展MYSQL:存储函数


                                        与存储过程的区别:


   存储函数不能拥有输出参数,本身就是输出参数,存储过程可以拥有输出参数;

   直接对存储函数调用不需要使用CALL 语句,存储过程使用CALL语句;

   存储函数

   包含一条RETURN语句,存储过程没有

                                               创建存储函数:


CREATE FUNCTION sp_name ([func_paraneter[,…]])   RETURNS type Routine_body

 

                                                调用存储函数:


SELECT sp_name ([func_paraneter[,…]])

                                                删除存储函数:


DROP FUNCTION(IF EXISTS) sp_name 

 


最新回复(0)