Sakila 数据库中的存储过程

本文整理了 Sakila 数据库中定义的 3 个存储过程及每个存储过程的用法。

Sakila 数据库中共定义了 3 个存储过程。

film_in_stock

film_in_stock 存储过程确定一个给定的影片在给定的商店是否有库存。

参数

p_film_id
要检查的影片的 ID,来自 film 表的 film_id 字段。
p_store_id
要检查的商店的 ID,来自 store 表的 store_id 字段。
p_film_count
OUT 返回库存影片拷贝数的参数。

返回值

此过程生成库存影片副本的库存 ID 编号表,并返回(在 p_film_count 参数中)指示该表中的行数。

示例用法

CALL film_in_stock(1,1,@count);
+--------------+
| inventory_id |
+--------------+
|            1 |
|            2 |
|            3 |
|            4 |
+--------------+
4 rows in set (0.01 sec)

Query OK, 1 row affected (0.01 sec)
SELECT @count;
+--------+
| @count |
+--------+
|      4 |
+--------+
1 row in set (0.00 sec)

film_not_in_stock

film_not_in_stock 存储过程确定在给定的商店里一个给定的影片的任何拷贝是否没有库存(租出去)。

参数

p_film_id
要检查的影片的 ID,来自 film 表的 film_id 字段。
p_store_id
要检查的商店的 ID,来自 store 表的 store_id 字段。
p_film_count
一个OUT 参数,返回没有库存的影片拷贝数。

返回值

此过程为没有库存的影片副本生成一个库存 ID 列表,并返回(在 p_film_count 参数中)指示该表中的行数。

示例用法

CALL film_not_in_stock(2, 2, @count);

```output` +————–+ | inventory_id | +————–+ | 9 | +————–+ 1 row in set (0.01 sec)

Query OK, 1 row affected (0.01 sec)

mysql> SELECT @count;
+--------+
| @count |
+--------+
|      1 |
+--------+
1 row in set (0.00 sec)

rewards_report

rewards_report 存储过程会生成一个由参数指定的上个月的优质客户的列表。

参数

min_monthly_purchases
客户在上个月需要进行的最低购买或租赁次数才能获得资格。
min_dollar_amount_purchased
客户在上个月需要花费的最低金额才能获得资格。
count_rewardees
OUT 返回满足指定资格的客户计数的参数。

返回值

此过程会生成符合指定资格的客户表。该表的结构与 customer 表相同。该过程还返回(在 count_rewardees 参数中)该表中的行数。

示例用法

CALL rewards_report(7, 20.00, @count);
...
| 598         | 1        | WADE        | DELVALLE     | [email protected]         | 604        | 1      | 2006-02-24 10:48:30 | 2006-02-15 04:57:20 |
| 599         | 2        | AUSTIN      | CINTRON      | [email protected]        | 605        | 1      | 2006-02-24 10:48:30 | 2006-02-15 04:57:20 |
...

42 rows in set (0.11 sec)

Query OK, 0 rows affected (0.67 sec)
SELECT @count;
+--------+
| @count |
+--------+
|     42 |
+--------+
1 row in set (0.00 sec)