MySQL - 删除存储过程语句



MySQL 删除存储过程语句

存储过程是子程序,存储在 SQL 目录中的 SQL 语句片段。所有可以访问关系数据库的应用程序(Java、Python、PHP 等)都可以访问存储过程。

存储过程包含输入和输出参数或两者兼有。如果您使用 SELECT 语句,它们可能会返回结果集。存储过程可以返回多个结果集。

您可以使用 DROP PROCEDURE 语句删除函数。

语法

以下是 DROP PROCEDURE 语句的语法:

DROP PROCEDURE procedure_name

其中,`procedure_name` 是您需要删除的过程的名称。

示例

假设我们在数据库中创建了一个名为Emp的表,如下所示:

CREATE TABLE Employee(
   Name VARCHAR(255), 
   Salary INT NOT NULL, 
   Location VARCHAR(255)
);

假设我们创建了一个名为myProcedure的存储过程,它接受名称、工资和位置值并将它们插入到上面创建的表中作为一条记录。

DELIMITER //
Create procedure myProcedure (
   IN name VARCHAR(30),
   IN sal INT,
   IN loc VARCHAR(45))
   BEGIN
      INSERT INTO Employee(Name, Salary, Location) VALUES (name, sal, loc);
   END //
DELIMITER ;

同样,以下过程检索上面创建的表中的所有记录:

DELIMITER //
Create procedure retrieveRecords ()
   BEGIN
      SELECT * FROM Dispatches;
   END //

您可以使用 SHOW PROCEDURE STATUS 语句验证数据库中的过程列表,如下所示:

SHOW PROCEDURE STATUS WHERE db = 'test'\G;

输出

上述 MySQL 查询将生成以下输出:

************** 1. row **************
                  Db: test
                Name: myProcedure
                Type: PROCEDURE
             Definer: root@localhost
            Modified: 2023-12-05 15:19:39
             Created: 2023-12-05 15:19:39
       Security_type: DEFINER
             Comment:
character_set_client: cp850
collation_connection: cp850_general_ci
  Database Collation: utf8mb4_0900_ai_ci
************** 2. row **************
                  Db: test
                Name: retrieveRecords
                Type: PROCEDURE
             Definer: root@localhost
            Modified: 2023-12-05 15:20:18
             Created: 2023-12-05 15:20:18
       Security_type: DEFINER
             Comment:
character_set_client: cp850
collation_connection: cp850_general_ci
  Database Collation: utf8mb4_0900_ai_ci

以下查询删除/丢弃上面创建的过程:

DROP PROCEDURE myProcedure;

DROP PROCEDURE retrieveRecords;

验证

由于我们已经删除了这两个过程。如果您再次验证过程列表,您将得到一个空集:

SHOW PROCEDURE STATUS WHERE db = 'test';
Empty set (0.00 sec)

IF EXISTS 子句

如果您尝试删除不存在的过程,则会生成错误,如下所示:

DROP Procedure demo;
ERROR 1305 (42000): FUNCTION test.demo does not exist

如果您使用IF EXISTS子句以及 DROP PROCEDURE 语句,如下所示,则将删除指定的过程,如果不存在具有给定名称的过程,则将忽略该查询。

DROP PROCEDURE IF EXISTS demo;
广告
© . All rights reserved.