MySQL的存储过程(call)

MySQL的存储过程(call):

一,解释:

MySQL 存储过程是从 MySQL 5.0 开始增加的新功能。存储过程的优点有一箩筐。

不过最主要的还是执行效率和SQL 代码封装

特别是 SQL 代码封装功能,如果没有存储过程,在外部程序访问数据库时(例如 PHP),要组织很多 SQL 语句。特别是业务逻辑复杂的时候,一大堆的 SQL 和条件夹杂在 PHP 代码中,让人不寒而栗。

现在有了 MySQL 存储过程,业务逻辑可以封装存储过程中,这样不仅容易维护,而且执行效率也高。

 

二,使用

第一部分:创建一个简单的无参的存储过程**

1 用mysql客户端登入

2 选择数据库

mysql>use test;

3 查询当前数据库有哪些存储过程

mysql>   show procedure status where Db='数据库表名';
# 创建一个简单的存储过程
mysql>   create procedure hi() select 'hello';
# 存储过程创建完毕,看怎么调用它
mysql>   call hi();
  # 显示结果
  mysql> call hi(); +-------+ | hello | +-------+ | hello | +-------+ 1 row in set (0.00 sec)   Query OK, 0 rows affected (0.01 sec)
# 一个简单的储存过程就成功了,这只是一个演示,存储过程可以一次执行多个sql语句

MySQL 创建存储过程函数 ,函数的基本写法

create procedure 存储过程名字()
(
   [in|out|inout] 参数 datatype
)
​
BEGIN   
    //  MySQL 逻辑语句(参数自定义)
END
MySQL 存储过程参数如果不显式指定“in”、“out”、“inout”,则默认为“in”。习惯上,对于是“in” 的参数,我们都不会显式指定。
语法注意事项:
​
1,MySQL 存储过程中的每条语句的末尾,都要加上分号 “;” 
   ...
   declare c int;
   if a is null then
      set a = 0;
   end if;
   ...
end;
​
2,注释是  --   ;  MySQL 存储过程的参数不能指定默认值
​
3,不能在 MySQL 存储过程中使用 “return” 关键字。 
   set c = a + b;
   select c as sum;
   
end;
​
4. 调用 MySQL 存储过程时候,需要在过程名字后面加“()”,即使没有一个参数,也需要“()”
call pr_no_param();
​
5. 因为 MySQL 存储过程参数没有默认值,所以在调用 MySQL 存储过程时候,不能省略参数。可以用 null 来替代。 
call pr_add(10, null);

参考:https://www.cnblogs.com/you-zi/p/5519006.html

-- --------------------------------------------------------------------------------------------------------------------------------------------------------

补充

MySQL `IFNULL` 函数是MySQL控制流函数之一,它接受两个参数,如果不是`NULL`,则返回第一个参数。 否则,`IFNULL`函数返回第二个参数。
​
两个参数可以是文字值或表达式
​
IFNULL(expression_1,expression_2);    // 如果`expression_1`不为`NULL`,则`IFNULL`函数返回`expression_1`; 否则返回`expression_2`的结果。
​
`IFNULL`函数根据使用的上下文返回字符串或数字  
  • 6
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
回答: SQL语句"CALL"用于调用存储过程。通过使用声明为OUT或INOUT的参数,存储过程可以将值回传给调用者。在SQL级别,可以使用"ROW_COUNT()"函数来获取存储过程执行后所影响的行数。在C API中,可以使用"mysql_affected_rows()"函数来获取相同的信息。\[1\]如果要调用具有参数的存储过程,可以使用"@parameter_name"来存储输出值。例如,"CALL getPrice (1, @ProductName, @CustomerName, @Price);"将调用名为"getPrice"的存储过程,并将参数1传递给它。\[2\]如果存储过程不接受任何参数,可以直接调用它,例如"CALL getData;"。这将执行名为"getData"的存储过程,并返回结果集。\[3\] #### 引用[.reference_title] - *1* [MySQL的SQL语句 - 数据操做语句(1)- CALL 语句](https://blog.csdn.net/weixin_28721019/article/details/115735269)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [MySQL - CALL 语句](https://blog.csdn.net/allway2/article/details/127224653)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值