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;
廣告