1 CREATE PROCEDURE(创建)

CREATE PROCEDURE存储过程名(參数列表)

BEGIN

SQL语句代码块

END

注意:

由括号包围的參数列必须总是存在。假设没有參数,也该使用一个空參数列()。每一个參数默认都是一个IN參数。要指定为其他參数,可在參数名之前使用关键词 OUT或INOUT

mysqlclient定义存储过程的时候使用delimiter命令来把语句定界符从;变为//。

当使用delimiter命令时,你应该避免使用反斜杠(‘"’)字符,由于那是MySQL的转义字符。

如:

mysql> delimiter //

mysql> CREATE PROCEDURE simpleproc (OUT param1 INT)

-> BEGIN

-> SELECT COUNT(*) INTO param1 FROM t;

-> END

-> //

Query OK, 0 rows affected (0.00 sec)

1.2 ALTER PROCEDURE(改动)

ALTER PROCEDURE存储过程名SQL语句代码块

这个语句能够被用来改变一个存储程序的特征。

1.3 DROP PROCEDURE(删除)

DROP PROCEDURE IF EXISTS存储过程名

eg:DROP PROCEDURE IF EXISTS proc_employee (proc_employee存储过程名)

这个语句被用来移除一个存储程序。不能在一个存储过程中删除还有一个存储过程,仅仅能调用还有一个存储过程

1.4 SHOW CREATE PROCEDURE(类似于SHOW CREATE TABLE,查看一个已存在的存储过程)

SHOW CREATE PROCEDURE存储过程名

1.5 SHOW PROCEDURE STATUS(列出全部的存储过程)

SHOW PROCEDURE STATUS

1.6 CALL语句(存储过程的调用)

CALL存储过程名(參数列表)

CALL语句调用一个先前用CREATE PROCEDURE创建的程序。

CALL语句能够用声明为OUT或的INOUT參数的參数给它的调用者传回值。

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

1.7 BEGIN ... END(复合语句)

[begin_label:]

BEGIN

[statement_list]

END

[end_label]

存储子程序能够使用BEGIN ... END复合语句来包括多个语句。

statement_list代表一个或多个语句的列表。statement_list之内每一个语句都必须用分号(;)来结尾。

复合语句能够被标记。除非begin_label存在,否则end_label不能被给出,而且假设二者都存在,他们必须是相同的。

1.8 DECLARE语句(用来声明局部变量)

DECLARE语句被用来把不同项目局域到一个子程序:局部变量

DECLARE仅被用在BEGIN ... END复合语句里,而且必须在复合语句的开头,在不论什么其他语句之前。

1.9 存储程序中的变量

1.1 DECLARE局部变量

DECLARE var_name[,...] type [DEFAULT value]

这个语句被用来声明局部变量。

要给变量提供一个默认值,请包括一个DEFAULT子句。

值能够被指定为一个表达式,不须要为一个常数。

假设没有DEFAULT子句,初始值为NULL。

局部变量的作用范围在它被声明的BEGIN ... END块内。

它能够被用在嵌套的块中,除了那些用同样名字声明变量的块。

1.2 变量SET语句

SET var_name = expr [, var_name = expr]

在存储程序中的SET语句是一般SET语句的扩展版本号。

被參考变量可能是子程序内声明的变量,或者是全局server变量。

在存储程序中的SET语句作为预先存在的SET语法的一部分来实现。这同意SET a=x, b=y, ...这种扩展语法。

当中不同的变量类型(局域声明变量及全局和集体变量)能够被混合起来。

这也同意把局部变量和一些仅仅对系统变量有意义的选项合并起来。

1.3 SELECT ... INTO语句

SELECT col_name[,...] INTO var_name[,...] table_expr

这个SELECT语法把选定的列直接存储到变量。

因此,仅仅有单一的行能够被取回。

SELECT id,data INTO x,y FROM test.t1 LIMIT 1;

注意,用户变量名在MySQL 5.1中是对大写和小写不敏感的。

重要: SQL变量名不能和列名一样。假设SELECT ... INTO这种SQL语句包括一个对列的參考,并包括一个与列同样名字的局部变量,MySQL当前把參考解释为一个变量的名字。

1.10 MySQL存储过程參数类型(in、out、inout)

此小节内容来自:

參见地址:http://www.blogjava.net/nonels/archive/2009/04/22/233324.html

MySQL存储过程參数(in)

MySQL存储过程 “in”參数:跟 C语言的函数參数的值传递类似, MySQL存储过程内部可能会改动此參数,但对 in类型參数的改动,对调用者(caller)来说是不可见的(not visible)。

MySQL存储过程參数(out)

MySQL存储过程 “out”參数:从存储过程内部传值给调用者。在存储过程内部,该參数初始值为 null,不管调用者是否给存储过程參数设置值

MySQL存储过程參数(inout)

MySQL存储过程 inout參数跟 out类似,都能够从存储过程内部传值给调用者。不同的是:调用者还能够通过 inout參数传递值给存储过程。

总结

假设只想把数据传给 MySQL存储过程,那就使用“in”类型參数;假设只从 MySQL存储过程返回值,那就使用“out”类型參数;假设须要把数据传给 MySQL存储过程,还要经过一些计算后再传回给我们,此时,要使用“inout”类型參数。

1.11 样例:

1.1 创建存储过程

带(输出參数)返回值的存储过程:

--删除存储过程

DROP PROCEDURE IF EXISTS proc_employee_getCount

--创建存储过程

CREATE PROCEDURE proc_employee_getCount(out n int)

BEGIN

SELECT COUNT(*) FROM employee ;

END

--MYSQL调用存储过程

CALL proc_employee_getCount(@n);

带输入參数的存储过程:

--删除存储过程

DROP PROCEDURE IF EXISTS proc_employee_findById;

--创建存储过程

CREATE PROCEDURE proc_employee_findById(in n int)

BEGIN

SELECT * FROM employee where id=n;

END

--定义变量

SET @n=1;

--调用存储过程

CALL proc_employee_findById(@n);

操作存储过程时应注意:

1. 删除存储过程时仅仅须要指定存储过程名就可以,不带括号;

2. 创建存储过程时,无论该存储过程有无參数,都须要带括号;

3. 在使用SET定义变量时应遵循SET的语法规则;

SET @变量名=初始值;

4. 在定义存储过程參数列表时,应注意參数名与数据库中字段名差别开来,否则将出现无法预期的结果

CREATE PROCEDURE的更多相关文章

  1. 翻译:CREATE PROCEDURE语句(已提交到MariaDB官方手册)

    本文为mariadb官方手册:CREATE PROCEDURE的译文. 原文:https://mariadb.com/kb/en/create-procedure/我提交到MariaDB官方手册的译文 ...

  2. SQL _ Create Procedure

    -- ================================================ -- Template generated from Template Explorer usi ...

  3. sql: Oracle 11g create procedure

    CREATE OR REPLACE PROCEDURE proc_Insert_BookKindList ( temTypeName nvarchar2, temParent int ) AS nco ...

  4. SQL Server 在多个数据库中创建同一个存储过程(Create Same Stored Procedure in All Databases)

    一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 遇到的问题(Problems) 实现代码(SQL Codes) 方法一:拼接SQL: 方法二: ...

  5. sql:MySql create FUNCTION,VIEW,PROCEDURE

    use geovindu; #函数 DELIMITER $$ drop function if exists f_GetDepartmentName $$ CREATE function f_GetD ...

  6. sql:Mysql create view,function,procedure

    create database Liber; use Liber; #顯示數据庫 20150210 Geovin Du 涂聚文 SHOW DATABASES; drop table BookKindL ...

  7. Create MSSQL Procedure

    代码: CREATE PROCEDURE [dbo].[sp_UpdateCouponCount] AS GO

  8. 解决sql server中批处理过程中“'CREATE/ALTER PROCEDURE 必须是查询批次中的第一个语句”

    在批处理中加字段或表或视图或存储过程是否存在的判断 -----------------------------------------line----------------------------- ...

  9. Oracle: 禁忌给一般用户授权create any procedure、execute any procedure

    给一般用户授 create any procedure.execture any procedure 这2个权限是很不安全的事. 因为授权后,通过一些处理,该用户可以取得dba权限,请一定注意. 下面 ...

随机推荐

  1. android 新浪微博客户端的表情功能的实现

    这是一篇好文章,我转来收藏,技术的最高境界是分享. 最近在搞android 新浪微博客户端,有一些心得分享弄android客户端表情功能可以用以下思路1.首页把新浪的表情下载到本地一文件夹种,表情图片 ...

  2. Hacker(21)----密码攻防之加密与解密基础

    密码对于用户而言并不陌生,它是一种用于保护重要信息和文件的工具,只有输入正确的密码才可查看文件和信息的具体内容.黑客为了获取这些信息,会采用各种方式来破解密码,因此用户不仅需要了解黑客破解密码的常用方 ...

  3. js数字精度丢失

    http://www.cnblogs.com/snandy/p/4943138.html

  4. OkHttp 上手

    OkHttp 上手 优点 快.节省带宽. 支持 HTTP/2 和 SPDY. HTTP/2 和 SPDY 允许对同一个主机的所有请求,使用一个 socket. 如果不支持 SPDY 的话,可以用连接池 ...

  5. 解决linux下oracle进入sqlplus环境中后退键显示^H、上下键无效与ctrl+l无法清屏等问题【weber出品必属精品】

    习惯linux中上下键回退历史输入的人们肯定也希望sqlplus中也能实现相同的效果,可是不幸的是,sqlplus中不提供诸多方便的快捷键,这个时候我们就需要另外安装一个插件来实现这个想法. 这个插件 ...

  6. iOS_SN_Socket - AsyncSocket

    转载文章,原地址:http://yimouleng.com/2015/02/04/Socket-AsyncSocket/ 一.前言 公司的项目用到了Socket编程,之前在学习的过程当中,用到的更多的 ...

  7. 使用Flex 和 Red5开发简单视频直播功能

    Flex 是一个高效.免费的开源框架,可用于构建具有表现力的 Web应用程序,这些应用程序利用Adobe Flash Player和Adobe AIR, 可以实现跨浏览器.桌面和操作系统.虽然只能使用 ...

  8. poj1006 孙子定理

    Biorhythms Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 127944   Accepted: 40566 Des ...

  9. js 按元素向数组中最佳删除元素

    追加::: var a = [];// 创建数组 a.push(1); // 添加到最后 a.unshift(); // 添加到第一个位置 删除:::如果你没有使用第三方框架,有类似的扩展功能可以根据 ...

  10. 10步教你来优化WordPress速度 为服务器和访客减压

    1.Cookie的静态化制作 约有80%至90%的时间,访客要花费大量的时间等你的WordPress加载静态内容.这意味着,有大部分的时间,用户浏览您的网站,他们正在等待加载,如:图像,CSS,JS脚 ...