create procedure pr_add
(
@a int,// 错误
b int //正确
)
3 MySQL 存储过程的参数不能指定默认值。
4 MySQL 存储过程不需要在 procedure body 前面加 “as”。mysql存储过程教程而 SQL Server 存储过程必须加 “as” 关键字。
create procedure pr_add
(
a int,
b int
)
as - 错误,MySQL 不需要 “as”
begin
mysql statement ...;
end;
5 如果 MySQL 存储过程中包含多条 MySQL 语句,则需要 begin end 关键字。
create procedure pr_add
(
a int,
b int
)
begin
mysql statement 1 ...;
mysql statement 2 ...;
end;
6 MySQL 存储过程中的每条语句的末尾,都要加上分号 “;”
...
declare c int;
if a is null then
set a = 0;
end if;
...
end;
7 不能在 MySQL 存储过程中使用 “return” 关键字。
set c = a + b;
select c as sum;
/*
return c;- 不能在 MySQL 存储过程中使用。return 只能出现在函数中。
*/
end;
8 调用 MySQL 存储过程时候,需要在过程名字后面加“()”,即使没有一个参数,也需要“()”,调用out及inout参数格式为@arguments_name形式。
call pr_no_param();
9 因为 MySQL 存储过程参数没有默认值,所以在调用 MySQL 存储过程时候,不能省略参数。可以用 null 来替代。
call pr_add(10, null);
1,实战前提
需要MySQL 5及以上 ,我用的是MYSQL的客户端Navicat Premium,贴出的代码都是我变异没有错误的。如果读者没有安装客户端或者在你的电脑上报错,这里需要用到是DELIMITER //和DELIMITER ;两句,DELIMITER是分割符的意思,因为MySQL默认以”;”为分隔符,如果我们没有声明分割符,那么编译器会把存储过程当成SQL语句进行处理,则存储过程的编译过程会报错,所以要事先用DELIMITER关键字申明当前段分隔符,这样MySQL才会将”;”当做存储过程中的代码,不会执行这些代码,用完了之后要把分隔符还原
2,变量
使用DECLARE来声明,DEFAULT赋默认值,SET赋值
Java代码 复制代码

DECLARE counter INT DEFAULT 0;
SET counter = counter+1;
3,条件判断
IF THEN、ELSEIF、ELSE、END IF
DROP PROCEDURE IF EXISTS discounted_price;
CREATE PROCEDURE discounted_price(normal_price NUMERIC(8, 2), OUT discount_price NUMERIC(8, 2))
BEGIN
IF (normal_price > 500) THEN
SET discount_price = normal_price * 0.8;
ELSEIF (normal_price > 100 and normal_price<=500) THEN
SET discount_price = normal_price * 0.9;
ELSE
SET discount_price = normal_price;
END IF;
select discount_price as price;
END;
call discounted_price(600.0,@discount);//out参数调用时可以用@任意字符串
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/tongxinshuyu/article-40521-2.html
苏丹红
喜欢刘诺英的歌声