SQL 参数化存储过程

在 SQL 中,参数化存储过程是一种可以接受输入参数的 存储过程。这些参数可用于自定义存储过程的行为,并根据提供的输入值执行操作。

例如,假设我们要获取 country 列中值为 USA 的记录。因此,我们将编写 SQL 语句,如下所示:

SELECT *
FROM Customers
WHERE country = 'USA';

同样,如果我们想获取 country 值为 UK 的记录,我们将编写 SQL 语句,如下所示:

SELECT *
FROM Customers
WHERE country = 'UK';

请注意,在上面的两个示例中,除了在 country 列中查找的值之外,其他所有内容都相同。

因此,我们不必重复编写相同的代码,而是可以创建一个存储过程,并使用不同的值来调用它。


创建参数化存储过程

我们使用 CREATE PROCEDURE 命令后跟 SQL 命令来创建参数化存储过程。我们通过使用 @ 运算符或将参数包含在括号 () 中来指定参数。例如,

SQL Server

CREATE PROCEDURE ctr_customers @ctr VARCHAR(50) AS
SELECT customer_id, first_name
FROM Customers
WHERE Country = @ctr;

PostgreSQL

CREATE PROCEDURE ctr_customers (ctr VARCHAR(50))
LANGUAGE SQL
AS $$
SELECT customer_id, first_name
FROM Customers
WHERE Country = ctr;
$$;

MySQL

DELIMITER //
CREATE PROCEDURE ctr_customers (ctr VARCHAR(50))
BEGIN
SELECT customer_id, first_name
FROM Customers
WHERE Country = ctr;
END //
DELIMITER ;

在这里,ctr 是我们在调用名为 ctr_customers 的存储过程时需要传递的参数。


执行参数化存储过程

每当我们想根据 country 列中的值获取记录时,都可以简单地调用上面创建的存储过程。例如,

SQL Server

-- call the stored procedure with 'USA' as parameter value
EXEC ctr_customers 'USA';

-- call the same stored procedure again with another parameter value 'UK'
EXEC ctr_customers 'UK';

PostgreSQL, MySQL

-- call the stored procedure with 'USA' as parameter value
CALL ctr_customers ('USA');

-- call the same stored procedure again with another parameter value 'UK'
CALL ctr_customers ('UK');

多个参数化存储过程

存储过程也可以接受多个参数。例如,

SQL Server

-- create stored procedure with cus_id and max_amount as parameters

CREATE PROCEDURE order_details @cus_id INT, @max_amount INT AS
SELECT Customers.customer_id, Customers.first_name, Orders.amount
FROM Customers
JOIN Orders
ON Customers.customer_id = Orders.customer_id
WHERE Customers.customer_id = @cus_id AND Orders.amount < @max_amount;

PostgreSQL

-- create stored procedure with cus_id and max_amount as parameters

CREATE PROCEDURE order_details (cus_id INT, max_amount INT)
LANGUAGE SQL
AS $$
SELECT Customers.customer_id, Customers.first_name, Orders.amount
FROM Customers
JOIN Orders
ON Customers.customer_id = Orders.customer_id
WHERE Customers.customer_id = cus_id AND Orders.amount < max_amount;
$$;

MySQL

-- create stored procedure with cus_id and max_amount as parameters

DELIMITER //
CREATE PROCEDURE order_details (cus_id INT, max_amount INT)
BEGIN
SELECT Customers.customer_id, Customers.first_name, Orders.amount
FROM Customers
JOIN Orders
ON Customers.customer_id = Orders.customer_id
WHERE Customers.customer_id = cus_id AND Orders.amount < max_amount;
END //
DELIMITER ;

现在,我们可以使用以下代码调用此函数:

SQL Server

EXEC order_details 4, 400;

PostgreSQL, MySQL

CALL order_details (4, 400);

在这里,我们将两个数字(4400)作为参数值传递给 order_details 存储过程。


另请阅读

你觉得这篇文章有帮助吗?

我们的高级学习平台,凭借十多年的经验和数千条反馈创建。

以前所未有的方式学习和提高您的编程技能。

试用 Programiz PRO
  • 交互式课程
  • 证书
  • AI 帮助
  • 2000+ 挑战