MySQL - BEGIN ... END 复合语句



BEGIN ... END 复合语句

BEGIN ... END 语法用于创建复合语句。这些复合语句包含多组语句。这些语句以 BEGIN 开头,以 END 语句结尾。复合语句中的每个语句都以分号 (;) 或当前语句分隔符结尾。

存储过程和函数、触发器和事件是 MySQL 中的复合语句。您可以在另一个 BEGIN ... END 块中编写 BEGIN ... END 块,我们还可以标记这些语句。

复合语句可以包含其他块,例如变量声明、条件、游标,包括循环和条件测试。

语法

以下是 BEGIN ... END 复合语句的语法:

[begin_label:] BEGIN
   [statement_list]
END [end_label]

示例 1

假设我们在 MySQL 数据库中使用 CREATE TABLE 创建了一个名为 Employee 的表,如下所示:

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

以下是一个 MySQL 存储过程的示例。在这里,我们正在将一列插入到 Employee 表中,并从用户处获取值。(通过输入参数)

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 ;

调用存储过程

以下语句调用上面创建的存储过程。

CALL myProcedure ('Raman', 35000, 'Bangalore');

如果您检索表的內容,您可以观察到新插入的行,如下所示:

select * from employee;

输出

上述查询产生以下输出:

姓名 工资 地点
Raman 35000 Bangalore

示例 2

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

CREATE TABLE Emp(
   Name VARCHAR(255), 
   DOB DATE, 
   Location VARCHAR(255)
);

并且我们在 Emp 表中插入了三条记录,如下所示:

INSERT INTO Emp VALUES 
('Amit', DATE('1970-01-08'), 'Hyderabad'),
('Sumith', DATE('1990-11-02'), 'Vishakhapatnam'),
('Sudha', DATE('1980-11-06'), 'Vijayawada');

以下查询创建一个名为 getDob() 的函数,该函数接受员工的姓名,检索并返回 DOB 列的值。

DELIMITER //
CREATE FUNCTION test.getDob(emp_name VARCHAR(50))
   RETURNS DATE
   DETERMINISTIC
   BEGIN
      declare dateOfBirth DATE;
      select DOB into dateOfBirth from test.emp where Name = emp_name;
      return dateOfBirth;
   END//
DELIMITER ;

如果您调用该函数,您可以获取员工的出生日期,如下所示。

SELECT getDob('Amit');

输出

以下是上述程序的输出:

getDob('Amit')
1970-01-08
广告

© . All rights reserved.