Mục tiêu

Truyền tham số vào Store Procedure.

Luyện tập tạo store procedure.

Mô tả- Truyền tham số vào Store Procedure

Thực hành luyện tập tạo store procedure trên cơ sở dữ liệu classicmodels.

Chúng ta có bảng customers như sau:

Truyền tham số vào Store Procedure

Hướng dẫn

Trong MYSQL thì sẽ tồn tại ba loại Tham số đó là tham số IN, tham số OUT và tham số INOUT

IN: Đây là chế độ mặc định (nghĩa là nếu bạn không định nghĩa loại nào thì nó sẽ hiểu là IN).

OUT: Chế độ này nếu như trong Procedure có tác động thay đổi thì nó sẽ thay đổi theo. Nhưng có điều đặc biệt là dù trước khi truyền vào mà bạn gán giá trị cho biến đó thì vẫn sẽ không nhận được vì mặc định nó luôn hiểu giá trị truyền vào là NULL.

INOUT: Đây là sự kết hợp giữa IN và OUT. Nghĩa là có thể gán giá trị trước và có thể bị thay đổi nếu trong Procedure có tác động.

Tham số loại IN

Ví dụ:

DELIMITER //

CREATE PROCEDURE getCusById

(IN cusNum INT(11))

BEGIN

SELECT * FROM customers WHERE customerNumber = cusNum;

END //

DELIMITER ;

Gọi store procedure:

call getCusById(175);

Kết quả:

Tham số loại OUT

Khi truyền tham số dạng OUT mục đích là lấy dữ liệu trong Proedure và sử dụng ở bên ngoài.

Khi truyền tham số vào dạng OUT phải có chữ @ đằng trước biến

Hoạt động giống tham chiếu nên biến truyền vào dạng OUT không cần định nghĩa trước, chính vì vậy khởi đầu nó có giá trị NULL

VD:

DELIMITER //

CREATE PROCEDURE GetCustomersCountByCity(

IN  in_city VARCHAR(50),

OUT total INT

)

BEGIN

    SELECT COUNT(customerNumber)

    INTO total

FROM customers

WHERE city = in_city;

END//

DELIMITER ;

Gọi store procedure:

CALL GetCustomersCountByCity(‘Lyon’,@total);

SELECT @total;

Tham số loại INOUT

INOUT là sự kết hợp giữa IN và OUT, ví dụ:

DELIMITER //

CREATE PROCEDURE SetCounter(

INOUT counter INT,

IN inc INT

)

BEGIN

SET counter = counter + inc;

END//

DELIMITER ;

Gọi store procedure:

SET @counter = 1;

CALL SetCounter(@counter,1); — 2

CALL SetCounter(@counter,1); — 3

CALL SetCounter(@counter,5); — 8

SELECT @counter; — 8

Trên đây CodeGym đã cùng với bạn luyện tập tạo store procedure. Hãy chụp ảnh màn hình và nộp bài thực hành của bạn trên CodeGymX để cùng nhau luyện tập nhé!


Hãy tham gia nhóm Học lập trình để thảo luận thêm về các vấn đề cùng quan tâm.