存储过程

为什么要使用存储过程?

答:1.可以增强SQL语言的功能和灵活性,存储过程可以用流程语句来编写,可以完成复杂的判断和运算

        2.良好的封装性。存储过程被创建后,可以在程序中反复的被调用,而不必重新编写该存储过程的SQL语句。

        3.高性能。存储过程执行一次后,其执行规划就驻留在高速缓冲存储器中,在以后的操作中只用从中调用已编译好的二进制代码执行即可。

        4.可以减少网络流量。由于存储过程是在服务器端运行,且执行速度快,客户调用该存储过程时,网路传送的只是改调用语句,降低了网络负载。

        5.存储过程可作为一种安全机制来确保数据库的安全性与完整性。


MySQL中,创建存储过程的基本形式如下:

    CREATE PROCEDURE sp_name ([proc_parameter[,...]])  
        [characteristic ...] routine_body </span>
         sp_name参数是存储过程的名称;

         proc_parameter表示存储过程的参数列表;

         characteristic参数指定存储过程的特性;

         routine_body参数是SQL代码的内容,可以用BEGIN…END来标志SQL代码的开始和结束。

 proc_parameter中的每个参数由3部分组成。这3部分分别是输入输出类型、参数名称和参数类型。其形式如下:

                                   [ IN | OUT | INOUT ] param_name type

          IN表示输入参数;OUT表示输出参数; INOUT表示既可以是输入,也可以是输出;

           param_name参数是存储过程的参数名称;

           type参数指定存储过程的参数类型,该类型可以是MySQL数据库的任意数据类型。

characteristic参数有多个取值。其取值说明如下:

           LANGUAGE SQL:说明routine_body部分是由SQL语言的语句组成,这也是数据库系统默认的语言。

           [NOT] DETERMINISTIC:指明存储过程的执行结果是否是确定的。

           DETERMINISTIC表示结果是确定的。每次执行存储过程时,相同的输入会得到相同的输出。

           NOT DETERMINISTIC表示结果是非确定的,相同的输入可能得到不同的输出。默认情况下,结果是非确定的。

{ CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }:指明子程序使用SQL语句的限制。

           CONTAINS SQL表示子程序包含SQL语句,但不包含读或写数据的语句;

           NO SQL表示子程序中不包含SQL语句;

           READS SQL DATA表示子程序中包含读数据的语句;

           MODIFIES SQL DATA表示子程序中包含写数据的语句。

           默认情况下,系统会指定为CONTAINS SQL。

SQL SECURITY { DEFINER | INVOKER }:指明谁有权限来执行。

          DEFINER表示只有定义者自己才能够执行;

          INVOKER表示调用者可以执行。默认情况下,系统指定的权限是DEFINER。

COMMENT 'string':注释信息。

技巧:创建存储过程时,系统默认指定CONTAINS SQL,表示存储过程中使用了SQL语句。但是,如果存储过程中没有使用SQL语句,最好设置为NO SQL。而且,存储过程中最好在COMMENT部分对存储过程进行简单的注释,以便以后在阅读存储过程的代码时更加方便。


例子:创建一个removeSexAndReturnInfos存储过程,在对相对应的sex删除时,同时会输出执行的行数,以及所剩的数目。(创建多个OUT类型参数的存储过程,同时创建单个OUT,或没有OUT,获没有参数均是可以使用存储过程的)

mysql> DELIMITER //
mysql> CREATE PROCEDURE removeSexAndReturnInfos (IN csex CHAR(1),OUT deleteUser SMALLINT UNSIGNED,
OUT userCounts SMALLINT UNSIGNED)
    -> BEGIN
    -> DELETE FROM custs WHERE cust_sex=csex;
    -> SELECT ROW_COUNT() INTO deleteUser;
    -> SELECT COUNT(cust_id) FROM custs  INTO userCounts;
    -> END
    -> //
</span>
创建存储过程后,调用存储过程
mysql>Call removeSexAndReturnInfos('G',@a,@b)
说明:@a @b 为参数,其他形式均可
mysql>SELECT @a,@b;
输出结果为两个参数所代表的值,就是行数
 
 说明:MySQL中默认的语句结束符为分号(;)。存储过程中的SQL语句需要分号来    结束。为了避免冲突,首先用"DELIMITER &&"将MySQL的结束符设置为&&。最后再用"DELIMITER ;"来将结束符恢复成分号。这与创建触发器时是一样的。 



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
课程介绍:          Informatica 9.6 实战课程,将从数据仓库体系架构介绍,服务器搭建配置,实例组件操作,丰富的案例,及项目实战开发过程 来讲述ETL工具Informatica的实际应用,真正完成数据仓库全流程开发应用,ODS层,EDW层,DM层,学完该课程具备ETL软件开发工程师能力水平,能独立完成项目开发工作,从入门到高级项目开发应用,每个实例都载图,课件,教程,数据等,能达到中高级ETL开发能力,本课程的学习要求,一定跟着实例动手实战,操作才能掌握实例的开发步骤,及开发注意事项。每个组件都用具体案例讲解,保证学以致用。掌握ETL的开发技能,搭建数据仓库体系架构。应对各环境操作。具体数据实操与应用。 你将收获:ETL软件开发工程师能力与水平数据仓库体系架构案例综合应用实战ETL实战项目开发数据采集与数据处理数据清洗与数据仓库指标统计学会使用Informatica完成项目开发掌握ETL开发流程掌握数据质量管理 适用人群 数据仓库初学者 数据仓库开发工程师 数据库开发工程师 BI开发工程师 数据可视化工程师大数据开发与应用 数据仓库管理 数据管理 数据分析师 业务数据分析 零基础入门ETL ETL大数据处理 数据仓库体系架构图: 课程大纲:01_Informatica9.6课程导学02_数据仓库体系介绍03_Oracle_安装04_Oracle_配置.wmv05_PLSQL工具汉化破解06_Informatica9.6安装.wmv07_Informatica9.6服务器配置.wmv08_客户端的安装配置连接.wmv09_客户端工具介绍10_源数据介绍11_入门实例EMP_0112_入门实例EMP_0213_入门实例DEPT表14_表达式Fx组件实例115_表达式Fx组件实例216_聚合组件实例17_查找Lookup组件实例18_过滤Filter组件实例19_Informatica9.6 排序sort组件实例详解20_Informatica9.6 分发器Router组件实例21_Informatica9.6 sql连接查询复习22_Informatica9.6 连接查询同构SQ23_Informatica9.6 连接查询异构JOIN24_Informatica9.6 等级函数Rank实例25_Informatica9.6 数据合并Union组件实例26_Informatica9.6 存储过程Px组件实例27_1行转列案例sql28_2行转列案例ETL过程29_工资大于该职位下平均工资案例30_增量抽取案例31_缓慢变化维案例32_对文件数据的读取写入33_项目1薪酬统计项目介绍34_Informatica 项目1薪酬统计项目接口入库ODS35_Informatica 项目1薪酬统计项目EDW层明细表临时表1sql36_Informatica 项目1薪酬统计项目EDW层明细表临时表2ETL37_Informatica 项目1薪酬统计EDW层明细表138_Informatica 项目1薪酬统计EDW层明细表239_Informatica 项目1薪酬统计EDW层明细表340_Informatica 项目1薪酬统计DM层月考勤统计报表41_Informatica 项目1开发DM层统计报表142_Informatica 项目1开发DM层统计报表243_Informatica 项目1开发DM层统计报表344_Informatica 项目1开发DM层薪资报表145_Informatica 项目1开发DM层薪资报表246_Informatica 项目1开发DM层薪资报表347_Informatica 项目2计费系统项目介绍48_Informatica 项目2计算系统项目ODS层49_Informatica 项目2计费系统EDW层150_Informatica 项目2计费系统EDW层251_Informatica 项目2计费系统EDW层352_Informatica 项目2计费系统DM层 

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值