MySQL存儲過程實踐

對employees數據庫創建存儲過程數據庫

建立不含有輸入輸出變量的存儲過程spa

DELIMITER // -- 設定語句結束分隔符
DROP PROCEDURE IF EXISTS GetEmployees; -- 若是該存儲過程已經存在,則刪除
CREATE PROCEDURE GetEmployees ( ) -- 建立不含有輸入輸出變量的存儲過程
BEGIN
    SELECT
        * 
    FROM
        employees 
    LIMIT 3;
    
END // 
DELIMITER ; -- 從新設定語句結束分隔符,每次查詢結束後都要將分隔符還原爲;

 

建立帶有一個輸出變量的存儲過程code

DELIMITER // -- 設定語句結束分隔符
DROP PROCEDURE IF EXISTS GetTotalNum; -- 若是該存儲過程已經存在,則刪除

CREATE PROCEDURE GetTotalNum (OUT TotalNum INT )  -- 建立帶有輸出變量的存儲過程
BEGIN
    SELECT
        count( * ) INTO TotalNum 
    FROM
        dept_emp;
    
END // 
DELIMITER ;-- 從新設定語句結束分隔符,每次查詢結束後都要將分隔符還原爲;

 

建立帶有多個輸出變量的存儲過程 blog

DELIMITER // -- 設定語句結束分隔符
DROP PROCEDURE IF EXISTS GetSalary; -- 若是該存儲過程已經存在,則刪除

CREATE PROCEDURE GetSalary ( OUT salaryhigh INT, OUT salarylow INT, OUT salaryavg INT )  -- 建立不含有輸入輸出變量的存儲過程
BEGIN
    SELECT
        Max( salary ) INTO salaryhigh 
    FROM
        salaries;
        
    SELECT
        Min( salary ) INTO salarylow 
    FROM
        salaries;
        
    SELECT
        Avg( salary ) INTO salaryavg 
    FROM
        salaries;
    
END // 
DELIMITER; -- 從新設定語句結束分隔符,每次查詢結束後都要將分隔符還原爲;

 

建立帶有輸入輸出變量的存儲過程ast

DELIMITER // -- 設定語句結束分隔符
DROP PROCEDURE IF EXISTS GetNumEachDept; -- 若是該存儲過程已經存在,則刪除
CREATE PROCEDURE GetNumEachDept ( IN dept CHAR(10), OUT NumDept INT )  -- 建立帶有輸入輸出變量的存儲過程
BEGIN
    SELECT
        count( * ) INTO NumDept 
    FROM
        dept_emp 
    WHERE
        dept_no = dept;
    
END// 
DELIMITER; -- 從新設定語句結束分隔符,每次查詢結束後都要將分隔符還原爲;

 

調用存儲過程class

CALL GetEmployees();

CALL GetSalary (@SalaryHigh, @SalaryLow, @SalaryAvg);
SELECT @Salaryhigh, @Salarylow, @Salaryavg;

CALL GetNumEachDept ( 'd004', @NumDept );
SELECT @NumDept;

CALL GetTotalNum(@TotalNum);
SELECT @TotalNum;

 

運行結果:變量

emp_no   birth_date    first_name  last_name  gender   hire_date
10001    1953-09-02    Georgi      Facello      M      1986-06-26
10002    1964-06-02    Bezalel     Simmel       F      1985-11-21
10003    1959-12-03    Parto       Bamford      M      1986-08-28

@Salaryhigh  @Salarylow   @Salaryavg
158220        38623            63811

@NumDept
73485

@TotalNum
331603
CALL GetEmployees()
> OK
> 時間: 0s

CALL GetSalary (@SalaryHigh, @SalaryLow, @SalaryAvg)
> OK
> 時間: 2.467s

SELECT @Salaryhigh, @Salarylow, @Salaryavg
> OK
> 時間: 0s

CALL GetNumEachDept ( 'd004', @NumDept )
> OK
> 時間: 0.03s

SELECT @NumDept
> OK
> 時間: 0s

CALL GetTotalNum(@TotalNum)
> OK
> 時間: 0.07s

SELECT @TotalNum
> OK
> 時間: 0s
相關文章
相關標籤/搜索