Bài giảng Cơ sở dữ liệu nâng cao: Chương 5 Procedure, Function cung cấp cho người học những kiến thức như: Procedure; Function; Bài tập thực hành. Mời các bạn cùng tham khảo!
Bài giảng CƠ SỞ DỮ LIỆU NÂNG CAO Số tc: 2; LT: 20; Btập: 10 GV: Nguyễn Thị Mỹ Dung Khối lớp: Đại học L2 Chương 5: Procedure, Function NỘI DUNG MÔN HỌC Chương Tổng quan CSDL hướng đối tượng Chương Tổng quan CSDL phân tán (4) Chương Cơ Oracle (4) Chương 4: Lập trình PL/SQL (4) Chương 5: Procedure, Function (4) Chương 6: Thiết kế đối tượng (6) Chương 7: Truy vấn CSDL HĐT (4) Chương 5: Procedure, Function Chương 5: Procedure, Function I Procedure II Function III Bài tập thực hành Chương 5: Procedure, Function I Procedure Giới thiệu Thủ tục chương trình để thực hành động cụ thể để tăng khả xử lý Có thể sử dụng nhiều lần, có tính bảo mật an tồn liệu cao Khơng có giá trị trả Khai báo CREATE [OR REPLACE] PROCEDURE tênthủtục [(dsáchthamsố)] IS [khai báo biến] BEGIN [EXCEPTION ] END; /*kết thúc thủ tục*/ Chương 5: Procedure, Function Procedure – khai báo (tt) - Từ khóa OR REPLACE để tự động xóa tạo thủ tục tên thủ tục tồn Ví dụ: CREATE OR REPLACE HienThiNgay (m number) IS … - Không dùng Varchar2(n) tham số truyền vào, kiểu liệu tham số truyền vào phải kiểu liệu không ràng buộc - Không thể áp dụng cho điều kiện thực nhóm (mệnh đề GROUP) Chương 5: Procedure, Function Procedure – khai báo (tt) Cú pháp chi tiết: CREATE [OR REPLACE] PROCEDURE procedure_name [( [IN | OUT | IN OUT] [, [IN | OUT | IN OUT] [DEFAULT ]) ] IS [ < kiểudữliệu > [NULL | NOT NULL] [DEFAULT ] ;] BEGIN [;] Đây khối lệnh PL/SQL chương trình [EXCEPTION Phần ngoại lệ (nếu có) WHEN THEN [;] ] END; Chương 5: Procedure, Function Procedure (tt) Gọi thủ tục - Cú pháp gọi PL/SQL: Declare … BEGIN Tênthủtục(danhsáchthamsố);*/ … END; - Cú pháp gọi thủ tục từ SQL*Plus: SQL> EXECUTE Tênthủtục(danhsáchthamsố) Xóa thủ tục DROP PROCEDURE tênthủtục; Chương 5: Procedure, Function Procedure (tt) VD1: Tăng kinh phí cho đề tài DT004 CREATE OR REPLACE PROCEDURE Tang_kinhphi IS kp_old INT; kp_new INT; BEGIN SELECT KINHPHI INTO kp_old FROM DETAI WHERE MADT='DT004'; IF SQL%FOUND THEN kp_new := kp_old + kp_old*10/100; UPDATE DETAI SET KINHPHI = kp_new WHERE MADT='DT004'; Chương 5: Procedure, Function Procedure – VD1 (tt) IF SQL%ROWCOUNT0 THEN DBMS_OUTPUT.PUT_LINE ('De tai DT004 duoc tang'); END IF; END IF; EXCEPTION WHEN NO_DATA_FOUND THEN DBMS_OUTPUT.PUT_LINE ('Khong tim thay de tai nay!'); END; Thực thi thủ tục: Begin TANG_kinhphi; end; Chương 5: Procedure, Function Procedure – VD (tt) VD2: Thủ tục in ngày tương ứng với số truyền vào CREATE PROCEDURE P_Ngay (n IN NUMBER,m OUT NUMBER) IS CHAR(15); BEGIN IF n =1 THEN :='Sunday'; ELSIF n =2 THEN :='Monday'; ELSIF n =3 THEN :='Tuesday'; ELSIF n =4 THEN :='Wednesday'; ELSIF n =5 THEN :='Thursday'; ELSIF n =6 THEN :='Friday'; ELSIF n =7 THEN :='Saturday'; END IF; m:=n; dbms_output.put_line('Ngay truyen vao:' || ngay); END; Chương 5: Procedure, Function 10 Procedure – VD2 (tt) Chạy thủ tục với tham số DECLARE M NUMBER; BEGIN P_NGAY(5,M); DBMS_OUTPUT.PUT_LINE('THAM SO RA:'|| M); END; Truyền trực tiếp tham số DECLARE M NUMBER; BEGIN P_NGAY(5,7); /* Cho nhan xet???? */ DBMS_OUTPUT.PUT_LINE('THAM SO RA:'|| M); END; Chương 5: Procedure, Function 11 Procedure – VD2 (tt) Truyền hai tham số DECLARE so1 NUMBER; so2 NUMBER; BEGIN so1:=4; P_NGAY(so1,so2); DBMS_OUTPUT.PUT_LINE(so1); DBMS_OUTPUT.PUT_LINE(so2); END; Kết in ra? Chương 5: Procedure, Function 12 Procedure – VD (tt) VD3: Tạo thủ tục kiểm tra khố thêm sinh viên Create Procedure THEM_SINHVIEN (v_MASV in CHAR, v_HOTENSV in varchar2, v_NAMSINH in INT, v_QUEQUAN in varchar2, v_HOCLUC in FLOAT) IS DEM int; Begin select count(*) into DEM from SINHVIEN where MASV = v_MASV; if ( DEM=1) then DBMS_Output.Put_line('Trung khoa chinh'); /*tru`ng khoa chinh */ else savepoint Point_1; insert into SINHVIEN (MASV, HOTENSV,NAMSINH, QUEQUAN, HOCLUC) values (v_MASV, v_HOTENSV,v_NAMSINH,v_QUEQUAN, v_HOCLUC) ; if SQL%ROWCOUNT = then DBMS_Output.Put_line('Xay loi giao tac'); /*loi khac*/ ROLLBACK to savepoint Point_1; end if; DBMS_Output.Put_line('Them nhan vien cong') ; COMMIT ; end if; end; Run Procedure BEGIN THEM_SINHVIEN ('SV008', 'Nguyen Van An',1995, 'Can Tho', 7.5); END; Chương 5: Procedure, Function 13 II Function Giới thiệu Hàm chương trình có trả giá trị Hàm thủ tục giống nhau, khác chỗ hàm có mệnh đề RETURN Tham số sử dụng hàm loại IN, khơng chấp nhận giá trị OUT hay giá trị IN OUT Không cho phép hàm trả kiểu liệu RECORD, TABLE Chương 5: Procedure, Function 14 Function (tt) Khai báo: CREATE [OR REPLACE] FUNCTION Tênhàm [( [IN] [, [IN] [DEFAULT ]) ] RETURN IS [ [NULL | NOT NULL] [DEFAULT ] ;] BEGIN [;] Đây khối lệnh PL/SQL chương trình RETURN ; [EXCEPTION Phần ngoại lệ (nếu có) WHEN THEN [;] ] END; Chương 5: Procedure, Function 15 Function (tt) Gọi hàm PL/SQL Đầu tiên khai báo biến có kiểu liệu trùng với kiểu liệu trị trả hàm Thực lệnh sau: Declare x CHAR(20); BEGIN x:=F_Ngay(3); /*Tổng quát: biến:=Tênhàm(danhsáchđốisố);*/ … END; Lệnh xóa hàm DROP FUNCTION Tênhàm; Chương 5: Procedure, Function 16 Function (tt) VD1: Hàm hiển thị Ngày tương ứng với số CREATE FUNCTION F_Ngay (n NUMBER) RETURN CHAR IS CHAR(15); BEGIN IF n =1 THEN :='Sunday'; ELSIF n =2 THEN :='Monday'; ELSIF n =3 THEN :='Tuesday'; Chương 5: Procedure, Function ELSIF n =4 THEN :='Wednesday'; ELSIF n =5 THEN :='Thursday'; ELSIF n =6 THEN :='Friday'; ELSIF n =7 THEN :='Saturday'; END IF; RETURN ngay; END; 17 Function (tt) Thực thi Hàm DECLARE X CHAR(30); BEGIN X:=F_NGAY(4); DBMS_OUTPUT.PUT_LINE(X); END; Ghi chú: thay ví dụ1 (Function) hàm khác (F_Ngay1) với tham số IN, OUT (tương tự Procedure) Chương 5: Procedure, Function 18 Function (tt) VD2: Đếm số lượng đề tài CREATE OR REPLACE FUNCTION SLDT (MA_DT DETAI.MADT%TYPE) RETURN NUMBER IS Soluong NUMBER; BEGIN SELECT COUNT(MADT) INTO Soluong FROM DETAI WHERE MADT=MA_DT; RETURN Soluong; END; Run Function DECLARE X NUMBER; Y VARCHAR2(5):='DT004'; BEGIN X:=SLDT(Y); DBMS_OUTPUT.PUT_LINE(X); END; Chương 5: Procedure, Function IN 19 IV Bài tập Xây dựng khối lệnh xuất bảng cửu chương Xây dựng khối lệnh liệt kê danh sách cán theo đơn vị? Xây dựng thủ tục (hoặc khối lệnh) kiểm tra MACB có tồn khơng? Xây dựng khối lệnh (hoặc thủ tục) kiểm tra MACV có tồn khơng? Tạo hàm đếm số lượng cán theo đơn vị Tạo thủ tục xố chức vụ khơng vi phạm ràng buộc khoá rỗng Chương 5: Procedure, Function 20 Tóm tắt chương - Cách xây dựng thủ tục, hàm - Thực cài đặt thủ tục, hàm - Thực thi thủ tục, hàm - Xoá thủ tục, hàm xây dựng Chương 5: Procedure, Function 21 ...NỘI DUNG MÔN HỌC Chương Tổng quan CSDL hướng đối tượng Chương Tổng quan CSDL phân tán (4) Chương Cơ Oracle (4) Chương 4: Lập trình PL/SQL (4) Chương 5: Procedure, Function (4) Chương 6:... buộc khoá rỗng Chương 5: Procedure, Function 20 Tóm tắt chương - Cách xây dựng thủ tục, hàm - Thực cài đặt thủ tục, hàm - Thực thi thủ tục, hàm - Xoá thủ tục, hàm xây dựng Chương 5: Procedure,... Thiết kế đối tượng (6) Chương 7: Truy vấn CSDL HĐT (4) Chương 5: Procedure, Function Chương 5: Procedure, Function I Procedure II Function III Bài tập thực hành Chương 5: Procedure, Function