在 SQL 中,存储过程是一组执行某些已定义操作的语句。我们创建存储过程是为了能够重用经常使用的语句。
因此,存储过程类似于编程中的函数。它们可以在我们调用它们时执行指定的事务。
创建过程
我们使用 `CREATE PROCEDURE` 命令后跟 SQL 命令来创建存储过程。例如:
SQL Server
CREATE PROCEDURE us_customers AS
SELECT customer_id, first_name
FROM Customers
WHERE Country = 'USA';
PostgreSQL
CREATE PROCEDURE us_customers ()
LANGUAGE SQL
AS $$
SELECT customer_id, first_name
FROM Customers
WHERE Country = 'USA';
$$;
MySQL
DELIMITER //
CREATE PROCEDURE us_customers ()
BEGIN
SELECT customer_id, first_name
FROM Customers
WHERE Country = 'USA';
END //
DELIMITER ;
Oracle
CREATE PROCEDURE us_customers
AS res SYS_REFCURSOR;
BEGIN
open res for
SELECT customer_id, first_name
FROM Customers
WHERE country = 'USA';
DBMS_SQL.RETURN_RESULT(res);
END;
上面的命令在各种 DBMS 中创建了一个名为 `us_customers` 的存储过程。此过程从 `Customers` 表中选择居住在 **USA** 的客户的 `customer_id` 和 `first_name` 列。
执行存储过程
现在,每当我们想获取所有居住在美国的客户时,都可以简单地调用上面提到的过程。例如:
SQL Server, Oracle
EXEC us_customers;
PostgreSQL, MySQL
CALL us_customers();
删除过程
我们可以使用 `DROP PROCEDURE` 命令删除存储过程。例如:
SQL Server, PostgreSQL, MySQL
DROP PROCEDURE us_customers;
在这里,SQL 命令删除了我们之前创建的 `us_customers` 过程。
推荐阅读: SQL 参数化过程