Coursera 笔记

Module 06 · Bonus Module: Advanced SQL for Data Engineers

Stored Procedures存储过程

Coursera ↗

欢迎观看本视频。看完本视频后,您将能够:

  • 解释什么是存储过程。
  • 列出使用存储过程的优势。
  • 描述如何创建和使用存储过程。

什么是存储过程? (Definition)

存储过程是一组 SQL 语句,它们被存储并在数据库服务器上执行。

  • 相比于从客户端向服务器发送多条 SQL 语句,您可以将这些语句封装在服务器上的一个存储过程中,然后从客户端发送一条语句来执行它们。

💡 编写语言

存储过程可以用多种不同的语言编写。例如,对于 DB2 on Cloud 和 DB2,您可以使用 SQL/PL、PL/SQL、Java、C 或其他语言编写。

  • 存储过程可以接受信息作为参数。
  • 它们可以执行 创建 (Create)、读取 (Read)、更新 (Update) 和 删除 (Delete) 等 CRUD 操作。
  • 它们可以将结果返回给客户端应用程序。

使用存储过程的优势 (Benefits)

使用存储过程的优势包括:

优势 说明
减少网络流量 只需一个调用即可执行多条语句。
性能提升 处理过程发生在存储数据的服务器上,只需将最终结果传回客户端。
代码重用 多个应用程序可以使用相同的存储过程来完成同一项工作。
提高安全性 * A. 无需向客户端开发人员暴露所有表和列信息。 * B. 您可以使用服务器端逻辑在数据被系统接受之前对其进行验证。

⚠️ 重要提醒

请记住,SQL 并不是一种功能完善的编程语言。您不应该尝试将所有业务逻辑都写入存储过程中。


创建存储过程

让我们看看如何在 SQL 中创建一个存储过程。

1. 定义与参数

首先,您使用 CREATE PROCEDURE 语句,并指定过程的名称以及它将接受的任何参数。

🔍 示例:update_sal 过程将接受一个员工编号和评分 (rating) 作为参数,并根据评分来更新员工的薪水。

2. 声明语言与逻辑

  • 接着,您需要声明您正在使用的语言。
  • 然后,您使用 BEGIN 和 END 语句来封装您的过程逻辑。

示例逻辑:给评分为 1 的员工加薪 10%,给其他所有员工加薪 5%。

  • 注意:您可以在过程逻辑中直接使用传递给过程的信息(参数)。

3. 更改分隔符 (Delimiter)

  • 由于存储过程将使用多条语句,因此在开始定义过程之前,更改分隔符(标记语句结束的字符)是谨慎的做法。
  • 在示例中,分隔符已被设置为 $$。
  • 代码中使用此分隔符 $$ 将标记过程命令的结束。
  • 最后,当过程定义完成后,我们将分隔符改回分号(;)。

使用存储过程

您可以从外部应用程序或动态 SQL 语句中调用存储过程。

  • 要调用我们刚才创建的 update_sal 存储过程,您可以使用 CALL 语句,加上存储过程的名称,并传递所需的参数。
  • 在本例中,需要传递员工 ID 和该员工的评分。

结论回顾

在本视频中,您了解到:

  • 存储过程是一组在服务器上执行的 SQL 语句。
  • 相比于向服务器发送 SQL 语句,存储过程具有许多优势。
  • 您可以在动态 SQL 语句和外部应用程序中使用存储过程。