sql存储过程

优势: 1.存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般SQL语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度,效率要比T-SQL语句高。

 

查询数据库中的存储过程和函数

       select `name` from mysql.proc where db = 'xx' and `type` = 'PROCEDURE'   //存储过程
       select `name` from mysql.proc where db = 'xx' and `type` = 'FUNCTION'   //函数

       show procedure status; //存储过程
       show function status;     //函数

位置:

 

删除存储过程

例如删除PROC_SEINFO存储过程的SQL语句如下

DROP PROCEDURE PROC_SEINFO

例如,删除多个存储过程proc10、proc20和proc30 

DROP PROCEDURE proc10, proc20, proc30

例如,删除存储过程组procs(其中包含存储过程proc1、proc2、proc3)

DROP PROCEDURE procs

 

 教程

https://www.runoob.com/w3cnote/mysql-stored-procedure.html

https://www.cnblogs.com/geaozhang/p/6797357.html

 

 

蔡工给的例子

-- 创建存储过程(查询的)

DELIMITER $ (注意要加这个才能创建成功)

CREATE PROCEDURE pro_test()

BEGIN

         -- 可以写多个sql语句;

         SELECT * FROM employee;

END $

(默认情况下,存储过程和默认数据库相关联,如果想指定存储过程创建在某个特定的数据库下,那么在过程名前面加数据库名做前缀,如 比lucax库创建函数pro_test()  lucax.pro_test()) 

 

-- 执行存储过程(先执行上面的保存执行的语句,再执行这句)

CALL pro_test();

 

----带输入参数的

DELIMITER $
CREATE PROCEDURE pro_test7(IN `p_playerno` VARCHAR(20))
BEGIN
SELECT * from ii WHERE name=p_playerno;
END$

-- 执行存储过程(先执行上面的保存执行的语句,再执行这句)

CALL pro_test("123");

 

输入类型:

IN p_playerno INTEGER   数字

IN `p_playerno` VARCHAR(20) 字符

IN `p_playerno` nvarchar(100)  utf-8 字符 

 

函数内赋值语法

 set p_playerno=2;

sql执行赋值语法

set @p_playerno=2;

CALL pro_test(@p_playerno);

如果变量是中文 存储过程 输入类型要使用 nvarchar

 

循环语法

DELIMITER $
CREATE PROCEDURE proc4()
begin
declare var int;
set var=0;
while var<6 do
insert into t values(var);
set var=var+1;
end while;
end;

 

传2个参数的写法

DELIMITER $

CREATE PROCEDURE CGthert(IN p_playerno INTEGER,IN p_playerno2 INTEGER)
begin
while p_playerno < p_playerno2 do
insert into t values(p_playerno);
set p_playerno=p_playerno+1;
end while;
end;

 

 

 

 

字符拼接和数字转string

DELIMITER $
CREATE PROCEDURE CGthert(IN p_playerno INTEGER,IN p_playerno2 INTEGER)
begin
while p_playerno < p_playerno2 do
-- 判断是否奇数 https://www.csdn.net/tags/OtDaMgxsOTk4OS1ibG9n.html
-- 字符拼接 https://www.cnblogs.com/kaibindirver/p/12179928.html
if p_playerno regexp '[02468]$' then 
    INSERT INTO `test`.`user` ( `userName`, `passWord`, `realName`) VALUES (concat("admin",CONVERT(p_playerno,CHAR)), '123', 'TRUE');
end if;  
    INSERT INTO `test`.`user` ( `userName`, `passWord`, `realName`) VALUES (concat("lucax",CONVERT(p_playerno,CHAR)), '123', 'FALSE');
set p_playerno=p_playerno+1;
end while;
end;

 

posted @ 2020-03-28 15:17  凯宾斯基  阅读(329)  评论(1编辑  收藏  举报