# 参数与返回值

URL: https://caijiao.org/mariadb/program/procedure/params
Source: docs/mariadb/program/procedure/params.md
Description: 本节讲解 MariaDB 存储过程和函数中的参数类型及返回值，帮助理解如何传递数据和获取结果，实现灵活的数据库操作。

## 1. 参数类型

MariaDB 存储过程支持三种参数类型：

- **IN 参数**  
  输入参数，调用时传入，过程内部只读，不能修改传入值。  
  示例：`IN p_id INT`

- **OUT 参数**  
  输出参数，过程执行后用于返回结果，调用时不传入初值，过程内部赋值。  
  示例：`OUT p_count INT`

- **INOUT 参数**  
  输入输出参数，调用时传入初值，过程内部可以读取和修改，执行结束返回最终值。  
  示例：`INOUT p_value VARCHAR(50)`

## 2. 返回值

- **存储过程**  
  通过 OUT 或 INOUT 参数返回结果，存储过程本身不直接返回值。  
  例子：

  ```sql
  CREATE PROCEDURE GetUserCount(OUT total INT)
  BEGIN
      SELECT COUNT(*) INTO total FROM users;
  END;
````

* **函数**
  函数必须返回一个值，使用 `RETURN` 语句返回，通常在查询中使用。
  例子：

  ```sql
  CREATE FUNCTION GetUserName(userId INT) RETURNS VARCHAR(100)
  BEGIN
      DECLARE name VARCHAR(100);
      SELECT username INTO name FROM users WHERE id = userId;
      RETURN name;
  END;
  ```

## 3. 调用示例

* 调用存储过程（带 OUT 参数）：

```sql
CALL GetUserCount(@total);
SELECT @total;
```

* 调用函数：

```sql
SELECT GetUserName(1);
```

---

掌握参数类型和返回值，有助于设计灵活且高效的数据库存储程序。
