Feb 2, 2010

4:54 AM - 6 comments

Giới thiệu về stored procedure trong MySQL (P. 2)

Trong phần này, bạn sẽ được hướng dẫn cách viết 1 stored procedure đơn giản và cách thức triệu gọi stored procedure này từ MySQL command line.

Viết stored procedure đầu tiên

Stored procedure đầu tiên khá đơn giản. Nó chỉ có chức năng duy nhất là lấy thông tin về tất cả các sản phẩm được lưu trong bảng products. Hãy xem xét đoạn mã dưới đây:

Mã:
 DELIMITER //
CREATE PROCEDURE GetAllProducts()
BEGIN
SELECT * FROM products;
END //
DELIMITER ;
Dòng đầu tiên bạn thấy là DELIMITER//. Dòng lệnh này thực sự không liện quan đến stored procedure. Phát biểu DELIMITER được dùng để thay đổi cú pháp phân cách chuẩn từ dấu “;” thành một dấu khác, trong trường hợp này là dấu “//”. Với việc làm này, bạn có thể viết được nhiều dòng SQL trong 1 stored procedure bằng việc sử dụng dấu “;” làm dấu phân cách dòng.

Sau từ khóa END, bạn lại sử dụng dấu phân cách // để ra hiệu cho trình biên dịch biết là đã hết stored procedure. Dòng cuối cùng, đưa cú pháp phân cách trở về trạng thái “nguyên thủy”, tức dấu “;”.

Để tạo 1 stored procedure mới, bạn sử dụng phát biểu CREATE PROCEDURE. Sau phát biểu CREATE PROCEDURE là tên của stored procedure mà bạn muốn đặt, trong ví dụ trên là GetAllProducts. Dĩ nhiên, tên của stored procedure ít nhiều mang tính gợi nhớ.

Phần thân của stored procedure được bắt đầu bởi cặp từ khóa BEGIN và END. Các câu lệnh SQL được đặt trong block này. Chúng ta sẽ phân tích chi tiết trong các phần sau. Đến đây, bạn đã hoàn tất việc tạo 1 stored procedure. Tiếp theo, chúng ta cần biết cách thức để triệu gọi 1 stored procedure trong 1 ứng dụng hay trong command line của MySQL.

Triệu gọi stored procedure

Để triệu gọi 1 stored procedure, chúng ta sử dụng câu lệnh SQL sau:

Mã:
CALL STORED_PROCEDURE_NAME()
Ví dụ với stored procedure vừa tạo ở trên:
Mã:
CALL GetAllProducts();
Bạn sẽ lấy được thông tin về tất cả các sản phẩm trong bảng products.

Sơ luận

Trong phần này, bạn đã được giới thiệu về cách thức thay đổi dấu phân cách chuẩn bằng việc sử dụng phát biểu DELIMITER. Việc làm này cho phép bạn có thể gõ nhiều dòng lệnh SQL bên trong 1 stored procedure. Bạn cũng được học cách viết 1 stored procedure đơn giản thông qua việc sử dụng phát biểu CREATE PROCEDURE và sau đó, triệu gọi từ command line với phát biểu CALL.

6 comments:

Chào bạn, bạn xem mình bị lỗi gì mà không tạo được store procedure.

create database EmployeeManage;
create table employees(
emp_id varchar(10),
emp_name varchar(40),
gender varchar(7),
address varchar(100),
email varchar(50),
primary key (emp_id)
);
select*from employees;
delimiter $$;
create procedure Add_Employee(in id_emp varchar(10),in name_emp varchar(40),in gender varchar(7),in address varchar(100),in email varchar(45))
begin
insert into employees values(id_emp,name_emp,gender,address,email);
end$$
create procedure select_employee()
begin
select*from employees;
end$$
delimiter ;$$
call select_employee();
call Add_Employee(1,'ngoclq','male','nam dinh','ngoclq@gmail.com');

Bạn chú ý ở cho bạn tạo procedure add_employee bạn truyền tham số id_emp kiểu varchar(10) mà lúc bạn gọi call add_employee thì bạn truyền vào giá trị = 1 vậy là bị lỗi rồi.

a cho e hỏi bây giờ viết store để insert chữ tiếng việt vào db thế nào ạ?

Bạn insert vào database bình thường thôi. Nhưng chú ý khi tạo database, character encoding của bạn phải hỗ trợ Unicode, (UTF-8) chẳng hạn.

Mình học ở trường thì viết SP trong ms SQL và chạy để xem kết quả thôi. Bạn cho mình hỏi viết các lệnh trên trong MySql thì vào đâu để viết. Mình cảm ơn nhiều.

Dùng command line của my sql đó bạn.

Post a Comment