更新 ch05_SQL高级处理.md
This commit is contained in:
parent
52e7dc3a50
commit
74a47dc35f
|
@ -223,6 +223,10 @@ CREATE
|
|||
|
||||
`routine_body` 由一个有效的SQL例程语句组成。它可以是一个简单的语句 **(通常以分号 `;` 结尾)**, 如 `SELECT` 或 `INSERT`,或一个使用 `BEGIN` 和 `END` 编写的复合语句。复合语句可以包含声明、循环和其他控制结构语句。在实践中,存储函数倾向于使用复合语句,除非例程主体由一个 `RETURN` 语句组成。
|
||||
|
||||
另外,你可能注意到了,这里特别提到了特殊分隔符 // 或者 $$。那么,他们是必须使用的吗?答案是否定的,只有在你使用命令行模式创建存储过程时,必须使用特殊分隔符来与分号进行区分,因为 SQL 语句的默认分隔符是分号,而存储过程通常包含多条 SQL 语句,每条语句都以分号结尾。如果不修改分隔符,SQL 语句在执行时遇到第一个分号时,认为当前语句已经结束,进而尝试执行它,从而无法完整创建包含 BEGIN ... END 块的存储过程,导致创建失败。
|
||||
|
||||
当你使用 SQL 客户端来创建存储过程时,不存在这个问题,无需修改分隔符。
|
||||
|
||||
### 5.5.2 参数介绍
|
||||
|
||||
存储过程和函数的参数有三类,分别是:`IN`,`OUT`,`INOUT`,其中:
|
||||
|
@ -237,6 +241,7 @@ CREATE
|
|||
- 查询
|
||||
下面的示例显示了一个简单的存储过程,给定一个国家代码,计算在 `world` 数据库的城市表中出现的该国家的城市数量。使用 `IN` 参数传递国家代码,使用 `OUT` 参数返回城市计数:
|
||||
```sql
|
||||
-- 命令行执行模式
|
||||
DELIMITER //
|
||||
|
||||
DROP PROCEDURE IF EXISTS citycount //
|
||||
|
@ -256,6 +261,7 @@ SELECT @cities;
|
|||
|
||||
- 创建表
|
||||
```SQL
|
||||
-- 命令行执行模式
|
||||
use world;
|
||||
|
||||
DELIMITER $$
|
||||
|
@ -274,6 +280,7 @@ show tables;
|
|||
```
|
||||
- 插入数据
|
||||
```SQL
|
||||
-- 使用 SQL 客户端进行创建
|
||||
CREATE DEFINER=`root`@`localhost` PROCEDURE `insert_product_test`()
|
||||
BEGIN
|
||||
declare i int;
|
||||
|
|
Loading…
Reference in New Issue