Thứ Ba, 14 tháng 3, 2017

[Hệ quản trị CSDL] Bài tập thực hành 3: Chương trình hàm thủ tục

Nội dung:

1. Tạo một stored procedure tên là displayFilmInfo nhận category_id và language_id

như là các tham số:

• Nếu category_id và language_id được chỉ rõ, trả lại thông tin các film có

category_id và language bằng các giá trị truyền vào.

• Nếu 0 được truyền như một tham số cho language_id thì trả lại thông tin

các film có category_id là tham số truyền vào.

• Nếu 0 được truyền như một tham số cho category_id thì trả lại các film có

language_id là tham số truyền vào.



DELEMITER // 
CREATE PROCEDURE sakila.disPlayFilmInfo(IN lg_id int, IN cg_id int)
BEGIN IF(lg_id != 0 and cg_id != 0) THEN 
SELECT * FROM film f
  INNER JOIN film_category fc ON f.film_id = fc.film_id
  INNER JOIN category c ON fc.category_id =c.category_id 
 WHERE f.language_id = lg_id; 
ELSEIF (lg_id = 0 and cg_id != 0) 
THEN SELECT * FROM film WHERE film.language_id = lg_id; 
ELSEIF (lg_id !=0 and cg_id =0) THEN
SELECT * FROM category c INNER JOIN film_category fc ON c.category_id = fc.category_id
 INNER JOIN film f ON f.film_id = fc.film_id WHERE category.category_id = cg_id; END IF; 
END //
DELIMITER ;


2. Viết hàm tính tổng số film được thuê của của hàng trong tháng, năm. Với tham số

đầu vào là mã của hàng, tháng, năm.

Sau đó sử dụng hàm trong lệnh SELECT đưa ra các cửa hàng và tổng số film được

thuê tại cửa hàng trong tháng 2/2006.





3. Viết stored procedure thực hiện công việc sau:

Giảm p% giá thuê cho n film có số lượng thuê ít nhất trong tháng, năm lấy ra từ date

(Trong đó p, n, date là tham số đầu vào).

Gợi ý: Thay vì cách sử dụng lệnh cập nhật theo lô. Làm các bước sau: Thực hiện lệnh

SELECT lấy ra n film cần tìm, sau đó sử dụng con trỏ duyệt các film_id từ lệnh SELECT

trên và thực hiện cập nhật film đó.

Đề bài: https://drive.google.com/file/d/0B5q4GuigFwLPNDUyOVlqZWtPQjg/view
Cách giải: