Update ch05: SQL高级处理.md

This commit is contained in:
mba1398
2022-01-28 14:11:49 +08:00
committed by GitHub
parent dec5387172
commit fa50735cac

View File

@@ -206,16 +206,18 @@ CREATE
```
这些语句被用来创建一个存储例程(一个存储过程或函数)。也就是说,指定的例程被服务器知道了。默认情况下,一个存储例程与默认数据库相关联。要将该例程明确地与一个给定的数据库相关联,需要在创建该例程时将其名称指定为 `db_name.sp_name`
使用CALL语句调用一个存储过程。而要调用一个存储的函数时则要在表达式中引用它。在表达式计算期间该函数返回一个值。
使用 `CALL` 语句调用一个存储过程。而要调用一个存储的函数时,则要在表达式中引用它。在表达式计算期间,该函数返回一个值。
`routine_body` 由一个有效的SQL例程语句组成。可以是一个简单的语句,如 `SELECT``INSERT`,或一个使用 `BEGIN``END` 编写的复合语句。复合语句可以包含声明、循环和其他控制结构语句。在实践中存储函数倾向于使用复合语句除非主体由一个RETURN语句组成。
`routine_body` 由一个有效的SQL例程语句组成。可以是一个简单的语句,如 `SELECT``INSERT`,或一个使用 `BEGIN``END` 编写的复合语句。复合语句可以包含声明、循环和其他控制结构语句。在实践中,存储函数倾向于使用复合语句,除非例程主体由一个 `RETURN` 语句组成。
## 5.5.2 参数介绍
存储过程和函数的参数有三类,分别是:`IN``OUT``INOUT`,其中:
- `IN` 是入参
- `OUT` 是出参
- `INOUT` 是xxx
- `IN` 是入参。每个参数默认都是一个 `IN` 参数。如需设定一个参数为其他类型参数,请在参数名称前使用关键字 `OUT``INOUT` 。一个IN参数将一个值传递给一个过程。存储过程可能会修改这个值但是当存储过程返回时调用者不会看到这个修改。
- `OUT` 是出参。一个 `OUT` 参数将一个值从过程中传回给调用者。它的初始值在过程中是 `NULL` ,当过程返回时,调用者可以看到它的值。
- `INOUT` :一个 `INOUT` 参数由调用者初始化,可以被存储过程修改,当存储过程返回时,调用者可以看到存储过程的任何改变。
对于每个 `OUT``INOUT` 参数,在调用过程的 `CALL` 语句中传递一个用户定义的变量,以便在过程返回时可以获得其值。如果你是在另一个存储过程或函数中调用存储过程,你也可以将一个常规参数或本地常规变量作为 `OUT``INOUT` 参数传递。如果从一个触发器中调用存储过程,也可以将 `NEW.col_name` 作为一个 `OUT``INOUT` 参数传递。
## 5.5.2 应用示例