MySQL - DECLARE 語句



MySQL DECLARE 語句

當您使用 BEGIN ... END 複合語句(例如變數宣告、條件、遊標、包括迴圈、條件測試、函式和過程)時,如果您需要在其中本地定義專案,可以使用 DECLARE 語句。

使用此語句,您可以建立區域性變數、條件、處理程式和遊標。在本地宣告這些專案時,您需要遵循以下順序:

變數和條件宣告 -> 遊標宣告 -> 處理程式宣告。

語法

以下是 MySQL DECLARE 語句的語法:

DECLARE var_name [, var_name] ... type [DEFAULT value]

您可以使用 MySQL DECLARE 語句定義區域性變數、條件和處理程式以及遊標。

示例

以下是宣告區域性變數的示例:

DELIMITER //
CREATE PROCEDURE RepeatExample()
BEGIN
   DECLARE val INT;
   DECLARE squares INT;
   DECLARE res VARCHAR(100);
   SET val=1;
   SET squares=1;
   SET res = '';
   REPEAT
      SET squares = val*val;
      SET res = CONCAT(res, squares,',');
      SET val = val + 1;
   UNTIL val >= 10
   END REPEAT;
   SELECT res;
END//
DELIMITER ;

您可以如下呼叫上述過程:

CALL RepeatExample;

輸出

以下是上述查詢的輸出:

res
1,4,9,16,25,36,49,64,81,

示例

以下是宣告條件變數的示例:

DELIMITER //
   CREATE PROCEDURE sample(IN dividend INT, IN divisor INT, OUT res double)
   BEGIN
      DECLARE dividedByZero CONDITION FOR SQLSTATE '22012';
      DECLARE CONTINUE HANDLER FOR dividedByZero
      RESIGNAL SET MESSAGE_TEXT = 'Error Denominator given is zero';
   IF divisor = 0 THEN
      SIGNAL dividedByZero;
   ELSE
      SET res:= dividend / divisor;
   END IF;
   END//
DELIMITER ;

如果您透過將 '0' 作為第二個引數來呼叫上述過程。

CALL sample(25, 0, @res);

將顯示錯誤,如下所示:

ERROR 1644 (22012): Error Denominator given is zero

示例

假設我們在 MySQL 資料庫中使用 CREATE 語句建立了一個名為 mobile_sales 的表,如下所示:

CREATE TABLE mobile_sales (
   SNO INT,
   mobile_brand VARCHAR(255),
   unit_sale INT
);

現在,我們將使用 INSERT 語句在 mobile_sales 表中插入 11 條記錄:

Insert into mobile_sales values
(1, 'Iphone', 3000),
(2, 'Samsung', 4000),
(3, 'Nokia', 5000),
(4, 'Vivo', 1500),
(5, 'Oppo', 900),
(6, 'MI', 6400),
(7, 'MotoG', 4360),
(8, 'Lenovo', 4100),
(9, 'RedMI', 4000),
(10, 'MotoG', 4360);

以下查詢是遊標語句的示例:

DELIMITER //
CREATE PROCEDURE cursorExample(num INT)
   BEGIN
      DECLARE number_of_units varchar(255);
      DECLARE cur1 CURSOR for SELECT unit_sale FROM mobile_sales 
	  WHERE SNO=num;
      OPEN cur1;
         FETCH cur1 into number_of_units;
         SELECT number_of_units;
      CLOSE cur1;
   END //
DELIMITER ;

您可以如下呼叫上述過程:

CALL cursorExample(5);

輸出

上述查詢產生以下輸出:

number_of_units
900
廣告