mysql5仓库储存进程入门创设,mysql存款和储蓄进程

储存进度

MySql数据库之存款和储蓄进度学习

后边在专门的学问中总是听旁人提到存款和储蓄进度,感到是个很深邃的事物,利用职业之余,看了下有关的学问,现将学习知识总计如下,希望得感到刚上学的人提供多少扶助。

 

付出处境:Navicat For Mysql。

 

MySQL存款和储蓄进程

 

1.1、CREATE  PROCEDURE  (创建)

CREATE PROCEDURE存款和储蓄进度名 (参数列表)

   BEGIN

         SQL语句代码块

END

注意:

由括号包围的参数列必得三番五次存在。若无参数,也该选择八个空参数列()。各样参数暗中认可都以一个IN参数。要钦命为其余参数,可在参数名从前运用首要词 OUT或INOUT

实例演练:

eg1,带(输出参数)再次回到值的积攒进程:

1、建表

create table abin5(

id int,

name5 VARCHAR(39)

)

2、成立存款和储蓄进度

create procedure pabin5(out n int)

BEGIN

 select count(*) from abin5;

END

3、测验存储进度

call pabin5(@n)

 

eg2,带输入参数的积累进度:

1、建设构造存款和储蓄进程

create procedure pabin6(in n int)

BEGIN

 SELECT * FROM abin5 where id=n;

END

2、测验存款和储蓄进程

SET @n=1;

CALL pabin6(@n)

或者

CALL pabin6(1)

在mysql客商端定义存储进程的时候使用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 (修改)

ALTELX570 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语句的扩张版本。

被参照他事他说加以考察变量也许是子程序内阐明的变量,只怕是全局服务器变量。

在积存程序中的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.第11中学是对大小写不灵活的。

重在: SQL变量名不能够和列名同样。如若SELECT ... INTO那样的SQL语句饱含叁个对列的参考,并蕴藏一个与列一样名字的局地变量,MySQL当前把参谋解释为三个变量的名字。

 

1.10     MySQL 存款和储蓄进度参数类型(in、out、inout)

 

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.          删除存款和储蓄进度时只须求钦点期存款款和储蓄过程名就可以,不带括号;

 

  1.          创造存储进程时,不管该存款和储蓄进程有无参数,都亟需带括号;

 

  1.          在使用SET定义变量时应依据SET的语法规则;

 

SET @变量名=初始值;

 

  1.          在概念存款和储蓄进程参数列表时,应注意参数名与数据库中字段名分别开来,不然将面世不可能预料的结果

 

1.12     Java代码调用存储进程(JDBC)

相关API:java.sql.CallableStatement

 

运用到java.sql.CallableStatement接口,该接口专门用来调用存款和储蓄进度;

 

该目的的得到依据于java.sql.Connection;

 

透过Connection实例的prepareCall()方法重返CallableStatement对象

 

prepareCall()内部为一稳住写法{call 存储进程名(参数列表1,参数列表2)}可用?占位

 

eg: connection.prepareCall("{call proc_employee(?)}");

 

仓库储存进度中参数管理:

 

输入参数:通过java.sql.CallableStatement实例的setXXX()方法赋值,用法等同于java.sql.PreparedStatement

 

出口参数:通过java.sql.CallableStatement实例的registerOutParameter(参数地点, 参数类型)方法赋值,个中参数类型首要行使java.sql.Types中定义的门类

 

Java代码调用带输入参数的存款和储蓄进程 (依据输入ID查询雇员消息)

 

publicvoid executeProcedure()

    {

        try {

            /**

             *callableStatementjava.sql.CallableStatement

             *connectionjava.sql.Connection

             *jdbc调用存储过程原型

             *{call存储过程名(参数列表1,参数列表2)}可用?代替

             */

            callableStatement=connection.prepareCall("{call proc_employee_findById(?)}");

            callableStatement.setInt(1, 1); //设置输入参数

            resultSet=callableStatement.executeQuery();//执行存储过程

            if(resultSet.next())

            {

                System.out.println(resultSet.getInt(1) ""t" resultSet.getString(2));

            }

        } catch (SQLException e) {

            e.printStackTrace();

        }

    }  

 

 

Java代码调用带输出参数的储存进程 (再次来到数据库中的记录数)

 

publicvoid executeProcedure()

    {

        try {

            /**

             *callableStatementjava.sql.CallableStatement

             *connectionjava.sql.Connection

             *jdbc调用存储过程原型

             *{call存储过程名(参数列表1,参数列表2)}可用?代替

             */

            callableStatement=connection.prepareCall("{call proc_employee_getCount(?)}");

            //设置输出参数

            callableStatement.registerOutParameter(1, Types.INTEGER);

            //执行存储过程

            resultSet=callableStatement.executeQuery();

            if(resultSet.next())

            {

                System.out.println(resultSet.getInt(1));

            }

        } catch (SQLException e) {

            e.printStackTrace();

        }

    }

 

在此以前在专业中总是听别人提到存款和储蓄进程,感觉是个很深邃的东西,利用专门的工作之余,看了下相关的学识,现将学习...

mysql存款和储蓄进度详细讲授及全部实例下载,mysql存储进程实例

一、存款和储蓄进程概念
  1.存款和储蓄进程(Stored Procedure)是一组为了达成一定功用的SQL语句集。经编写翻译后存款和储蓄在数据库 中。
  2.囤积进度是数据库中的贰个珍视对象,顾客通过点名存款和储蓄进程的名字并交由参数(假设该存款和储蓄进度带有参数)来实行它。
  3.积累进程是由流动调查节和SQL语句书写的历程,这么些历程经编写翻译和优化后存款和储蓄在数据库服务器中。
  4.囤积进程可由应用程序通过叁个调用来施行,并且允许顾客证明变量。
  5.而且,存款和储蓄进程能够收到和输出参数、重返实施存款和储蓄进程的图景值,也能够嵌套调用。
二、存款和储蓄进程优点
  1.增高了SQL语句的效果和灵活性
  2无需频仍创立一名目许多处理步骤,保险了多少的完整性
  3.消沉了互连网的通讯量,用户端调用存储进程只供给传存款和储蓄进度名和连锁参数就可以,与传输SQL语 句比较自然数据量少了成都百货上千
  4.增高了动用的安全性,通过存款和储蓄进程能够使未有权力的顾客在支配之下直接地存取数据库,进而有限帮忙数据的平安。
  5.得以兑现聚焦央调整制,当法则发生更换时,只须要修改存款和储蓄进程就可以。。、
三、存款和储蓄进程劣点
  1.调节和测量检验不是很有益于。
  2.大概未有开创存款和储蓄进度的义务。
  3.再一次编写翻译难题。
  4.移植性难点。

四、变量

  1.客商变量:以”@”伊始,情势为”@变量名。” 客户变量跟MySQL顾客端是绑定的,设置的变量,只对眼下客商选取的客户端生效.
  2.全局变量:定义时,以如下三种样式出现,set GLOBAL 变量名 或许 set @@global.变量名。show global variables; 对具有客商端生效。唯有super权限本领够安装全局变量。
  3.会话变量:只对连接的顾客端有效。一旦客商端失去连接,变量失效。show session variables;
  4.局地变量:成效范围在begin到end语句块之间。

    4.1在该语句块里安装的变量declare语句特意用来定义局地变量。declare numeric number(8,2)【MySQL的数据类型,如:int,float, date, varchar(length)】 default 9.95;

    4.2变量赋值:SET 变量名 = 表达式值 [,variable_name= expression ...],set numeric=1.2或者SELECT 2.3 into @x;

五、mysql 存款和储蓄程序

  1.主旨语法:create procedure  进程名 ([经过参数[,...]])[特性 ...] 进程体;先看基本例子

  第一种:

delimiter ;;
create procedure proc_on_insert()
begin
end
;;
delimiter

  第二种:

delimiter //
create procedure proc_on_insert()
begin
end
//
delimiter ;;

  注意:

  1).这里要求专一的是delimiter // 和delimiter ;;两句,delimiter是分割符的意味,因为MySQL暗中认可以";"为分隔符,假诺大家从未注脚分割符,那么编写翻译器会把仓库储存进程当成SQL语句进行管理,则存款和储蓄进度的编写翻译进度会报错,所以要先行用delimiter关键字注脚当前段分隔符,那样MySQL才会将";"当做存款和储蓄进度中的代码。
  2).存款和储蓄进程依照要求只怕会有输入、输出、输入输出参数,这里有叁个出口参数s,类型是int型,如若有四个参数用","分割开。
  3).进程体的初叶与甘休使用begin与emd举办标志。

  2..调用存款和储蓄进程基本语法:call sp_name()

  3.参数:MySQL存款和储蓄进度的参数用在积存进度的概念,共有三种参数类型,IN,OUT,INOUT,方式如:

    create procedure([[in |out |inout ] 参数名 数据类形...])
    in输入参数:表示该参数的值必得在调用存款和储蓄进程时钦命,在仓库储存进程中期维修改该参数的值不能够被重返,为暗中同意值
    out 输出参数:该值可在仓储进程之中被退换,并可重临
    inout 输入输出参数:调用时内定,并且可被改造和再次回到

    3.1in参数例子:

drop procedure if exists prc_on_in;
delimiter ;;
create procedure prc_on_in(in num int)
begin
declare number int ;
set number=num;
select number;
end
;;
delimiter ;;
set @num=1;
call prc_on_in(@num);

  3.2out参数开立例子

drop procedure if exists prc_on_out;
delimiter ;;
create procedure prc_on_out(out out_num int)
begin
select out_num;
set out_num=78;
select out_num;
end
;;
delimiter ;;
set @number=6;
call prc_on_out(@number);

  3.3inout参数创立例子

drop procedure if exists prc_on_inout;
delimiter ;;
create procedure prc_on_inout(inout p_inout int)
begin
select p_inout;
set p_inout=100;
select p_inout;
end
;;
delimiter ;;
set @p_out=90;
call prc_on_inout(@p_out);

  3.4仓库储存进度中的IF语句(if then elseif then else end if)

drop procedure if exists p_else;
create procedure p_else(in id int)
begin
    if (id > 0) then
        select '> 0' as id;
    elseif (id = 0) then
        select '= 0' as id;
    else
        select '< 0' as id;
    end if;
end;
set @p=-10;
call p_else(@p);

  3.5积攒进度中的case when then

drop procedure if exists p_case;
delimiter ;;
create procedure p_case(  
    id int  
)  
begin  
    case id  
    when 1 then     
    select 'one' as trans;  
    when 2 then  
    select 'two' as trans;  
    when 3 then   
    select 'three' as trans;  
    else  
    select 'no trans' as trans;  
    end case;  
end;  
;;
delimiter ;;
set @id=1;
call p_case(@id);

  3.6仓库储存进程中的while do … end while语句

drop procedure if exists p_while_do;  
create procedure p_while_do()  
begin  
    declare i int;  
        set i = 1;  
        while i <= 10 do  
            select concat('index : ', i) ;  
            set i = i   1;  
        end while;  
end;  
call p_while_do(); 

  3.7囤积进程中的repeat … until end repeat语句

drop procedure if exists p_repeat;
delimiter ;;
create procedure p_repeat(in parameter int)
BEGIN
     declare var int;  
     set var = parameter; 
     REPEAT
     set var = var - 1; 
     set parameter = parameter -2; 
     UNTIL var<0
     end REPEAT;
     select parameter;
END
;;
delimiter ;; 
set @parameter=1;
call p_repeat(@parameter);

  那一个REPEAT循环的功用和近些日子WHILE循环同样,不一致在于它的试行后检查是还是不是满意循环条件(until i>=5),而WHILE则是实行前检查(while i<5 do)。
  但是要在乎until i>=5前边不要加分号,如若加分号,就是提示语法错误。

3.8积攒进度中的loop ··· end loop语句

    

drop procedure if exists p_loop;
delimiter;;
create procedure p_loop(in parameter int)
BEGIN
     declare var int;  
     set var = parameter; 
     LOOP_LABLE:loop
     set var = var - 1; 
     set parameter = parameter -2; 
     if var<0 THEN
   LEAVE LOOP_LABLE;
     END IF;
     end LOOP;
     select parameter;
END
;;
delimiter;;
set @parameter=4;
call p_loop(@parameter);

    使用LOOP编写一样的循环调节语句要比选取while和repeat编写的要复杂一些:在循环之中插足了IF……END IF语句,在IF语句中又投入了LEAVE语句,LEAVE语句的情致是间距循环,LEAVE的格式是:LEAVE 循环标号。

  4.游标的施用 :定义游标 ,展开游标 ,使用游标 ,关闭游标例子

drop table if exists  person;
CREATE TABLE `person` (
  `id` int(11) NOT NULL DEFAULT '0',
  `age` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
insert into person(age) value(1);
drop procedure if exists prc_test1;
delimiter ;;
create definer = root@localhost procedure prc_test1()
BEGIN
    declare var int;   
     /**跳出循环标识**/
   declare done INT DEFAULT FALSE;
     /**声明游标**/
   declare cur cursor for select age from person;
   /**循环结束设置跳出标识**/
   declare continue handler for not FOUND set done = true;
   /**打开游标**/
   open cur;
     LOOP_LABLE:loop
        FETCH cur INTO var;
        select var;
     if done THEN
   LEAVE LOOP_LABLE;
     END IF;
     end LOOP;
     /**关闭游标**/
   CLOSE cur;
END;
;;
delimiter ;;
call prc_test1();

5.MySQL存款和储蓄进程的查询

5.1.查看某些数据库上边的蕴藏进度

select name from mysql.proc where db=’数据库名’;
或者
select routine_name frominformation_schema.routines where routine_schema='数据库名';
或者
show procedure status where db='数据库名';

5.2.查看存款和储蓄进程的事无巨细

show create procedure 数据库.存款和储蓄进程名;

6、MySQL存款和储蓄进度的更换

ALTE福特Explorer PROCEDURE:更动用CREATE PROCEDURE 建设构造的预先钦命的储存进程,其不会潜移默化相关存款和储蓄进程或存款和储蓄功效。

7.删减存款和储蓄进程
drop procedure sp_name //注释函数名

mysql存款和储蓄函数实例下载地址:        密码:282i

一、存款和储蓄进程概念 1.仓库储存进程(Stored Procedure)是一组为了做到一定功用的SQL语句...

本小说来给大家介绍自个儿在选拔mysql存款和储蓄进度中(成立,删除,调用)的一部分就学笔记,有亟待上学存款和储蓄进程的同学可踏向参照他事他说加以考察。

一、存款和储蓄进程的概念

一.开立存款和储蓄进度
1.为主语法:
create procedure sp_name()
begin
.........
end

二、存储进程的亮点

 

三、存款和储蓄进度的应用

2.参数字传送递

3.1 存款和储蓄进度的始建和调用

二.调用存储进程

3.2囤积进程的查看和删除

1.中坚语法:call sp_name()

一、存储进度的定义:

 CALL语句(存款和储蓄过程的调用)
CALL 存款和储蓄进度名(参数列表)  

积攒进程是一组为了完毕一定功效的SQL语句集,存款和储蓄在数据中,经过一次编写翻译后再一次调用无需二回编写翻译,可以看见为批管理语句。

CALL语句调用二个从前用CREATE PROCEDURE创设的顺序。
CALL语句能够用评释为OUT或的INOUT参数的参数给它的调用者传回值。
储存进度名称后边总得加括号,哪怕该存款和储蓄进程没有参数字传送递

二、优点

在意:存款和储蓄进度名称前边总得加括号,哪怕该存款和储蓄进程没有参数字传送递

①增高了代码的重用性

三.刨除存款和储蓄进程

②简化操作

1.着力语法:

③坚实了数码的安全性

DROP PROCEDURE  IF  EXISTS存款和储蓄进程名

④巩固了频率,极少了编写翻译次数和数据库服务器的连日次数

eg:DROP PROCEDURE IF EXISTS proc_employee (proc_employee 存款和储蓄进程名)

三、存款和储蓄进度的行使

那些讲话被用来移除二个囤积程序。不能够在二个仓库储存进程中删除另二个存款和储蓄进度,只好调用另一个存储进程

3.1开立和调用

2.注意事项
(1)不可能在一个仓库储存进程中除去另叁个存款和储蓄进度,只好调用另三个积存进程

创建语法:

四.区块,条件,循环

create procedure 存款和储蓄过程名(参数列表)

1.区块定义,常用
begin
......
end;
也足以给区块起外号,如:
lable:begin
...........
end lable;
能够用leave lable;跳出区块,实施区块今后的代码
2.法规语句
if 条件 then
statement
else
statement
end if;

begin

3.循环语句

  存款和储蓄进程体(精确的SQL语句)

(1).while循环
[label:] WHILE expression DO

end

statements

注:
1、参数列表包涵三部分
参数方式 参数名 参数类型
举例:
in stuname varchar(20)

END WHILE [label] ;

参数格局:
in:该参数能够用作输入,相当于该参数要求调用方传入值
out:该参数可以作为出口,也正是该参数能够看成再次回到值
inout:该参数不仅可以够用作输入又足以用作出口,也便是该参数既供给传入值,又足以再次来到值

(2).loop循环
[label:] LOOP

2、要是存款和储蓄进度体仅仅唯有一句话,begin end能够轻便
存款和储蓄进程体中的每条sql语句的末段要求必得加分号。
仓库储存进度的尾声可以选用 delimiter 重新恢复设置
语法:
delimiter 停止标识
案例:
delimiter $

statements

存款和储蓄进度调用

END LOOP [label];

call 存款和储蓄进程名字 (实参列表);

(3).repeat until循环
[label:] REPEAT

案例(空参列表):插入3条数据到user表中

statements

图片 1
图片 2

UNTIL expression

案例(带in的情势参数):根据beauty名,查询boys的名字
图片 3
图片 4
图片 5

END REPEAT [label] ;

案例(带out的形式参数):判定客户是还是不是是会员
图片 6
图片 7

五.其余常用命令
1.show procedure status
来得数据库中兼有存款和储蓄的蕴藏进程基本新闻,包罗所属数据库,存款和储蓄进度名称,创立时间等
2.show create procedure sp_name
呈现某二个囤积进度的详细音信

案例(带inout的情势参数):传入a和b三个值,最后a和b都翻倍并回到
图片 8

 

3.2存款和储蓄进度的查看和删除

存款和储蓄子程序能够动用BEGIN ... END复合语句来含有多少个语句。

删去存款和储蓄过程
语法:drop procedure 存款和储蓄进度名
DROP PROCEDURE chen00;正确方法
DROP PROCEDURE chen00,chen02;错误格局
图片 9

statement_list 代表一个或七个语句的列表。statement_list之内每一个语句都不能够不用分号(;)来最后。

翻看存款和储蓄进度的音讯
DESC myp2; 错误格局
SHOW CREATE PROCEDURE chen02;准确方法

复合语句能够被标志。除非begin_label存在,否则end_label不可能被提交,并且只要两岸都留存,他们不能够不是同一的。

图片 10

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语句的扩充版本。
被参谋变量或者是子程序内注解的变量,或许是大局服务器变量。
在积存程序中的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.第11中学是对大小写不灵活的。  

重要: SQL变量名不可能和列名一样。借使SELECT ... INTO那样的SQL语句包含二个对列的参谋,并蕴藏多个与列同样名字的局地变量,MySQL当前把参谋解释为三个变量的名字。

PHP 调用 MySQL 存款和储蓄进程 .

实例一:无参的囤积进程

 代码如下

复制代码

$conn = mysql_connect('localhost','root','root') or die ("数据连接错误!!!");
mysql_select_db('test',$conn);
$sql = "
create procedure myproce()
begin
INSERT INTO user (id, username, sex) VALUES (NULL, 's', '0');
end;
";
mysql_query($sql);//创设贰个myproce的存储进程

$sql = "call test.myproce();";
mysql_query($sql);//

调用myproce的寄放进度,则数据库中将扩充一条新记录。

实例二:传入参数的仓库储存进度

 代码如下

复制代码

$sql = "
create procedure myproce2(in score int)
begin
if score >= 60 then
select 'pass';
else
select 'no';
end if;
end;
";
mysql_query($sql);//创造多个myproce2的囤积进程
$sql = "call test.myproce2(70);";
mysql_query($sql);//

调用myproce2的蕴藏进度,看不到效果,能够在cmd下看看结果。

实例三:传出参数的储存进度

 代码如下

复制代码

$sql = "
create procedure myproce3(out score int)
begin
set score=100;
end;
";
mysql_query($sql);//成立多少个myproce3的贮存进程
$sql = "call test.myproce3(@score);";
mysql_query($sql);//调用myproce3的仓库储存进程
$result = mysql_query('select @score;');
$array = mysql_fetch_array($result);
echo '<pre>';print_r($array);

实例四:传出参数的inout存款和储蓄进程

 代码如下

复制代码

$sql = "
create procedure myproce4(inout sexflag int)
begin
SELECT * FROM user WHERE sex = sexflag;
end;
";
mysql_query($sql);//成立一个myproce4的存款和储蓄进度
$sql = "set @sexflag = 1";
mysql_query($sql);//设置性别参数为1
$sql = "call test.myproce4(@sexflag);";
mysql_query($sql);//

调用myproce4的囤积进度,在cmd上面看成效

一.创设存款和储蓄...

本文由星彩网app下载发布于星彩彩票app下载,转载请注明出处:mysql5仓库储存进程入门创设,mysql存款和储蓄进程

TAG标签:
Ctrl+D 将本页面保存为书签,全面了解最新资讯,方便快捷。