Chương 3 trình bày những nội dung liên quan đến PL/SQL như: Sử dụng PL/SQL, các khái niện về PL/SQL, các quy tắc cơ bản lập trình PL/SQL, Sequence của Oracle, điều khiển có điều kiện, điều khiển lặp, các ngoại lệ,... Mời các bạn cùng tham khảo để nắm bắt các nội dung chi tiết.
Trang 1 Điều khiển có điều kiện
Điều khiển lặp
Các ngoại lệ
Cursor
Trang 2Client
Server
Trang 5Phần thực thi
when no_data_found then
dbms_output.put_line ('there is no student with student 123');
end;
Trang 6Thay đổi giá trị trong biến
where student_id= v_student_id;
dbms_output.put_line ('Student name: '||v_first_name||' ‘
||v_last_name);
exception
when no_data_found then
dbms_output.put_line ('there is no student such student’);
Trang 7Thay đổi giá trị trong biến (tt)
Thiết lập giá trị SET VERIFY OFF
SET VERIFY OFF
Định danh cho biến
Kiểu dữ liệu đối tượng
Khởi tạo giá trị ban đầu
Trang 8Định danh cho biến
dbms_output.put_line('v_var1:'||v_var1);
dbms_output.put_line('v_var2:'||v_var2);
END;
15
Kiểu dữ liệu đối tượng
Kiểu dữ liệu tham chiếu đến trực tiếp một cột trong CSDL
Cú pháp: <tên_biến>.<kiểu thuộc tính>%TYPE
Trang 9Khởi tạo giá trị ban đầu
Trang 10Sequence của Oracle
Sequence: dùng để tạo tự động các giá trị trong
thuộc tính của dữ liệu
19
Sequence của Oracle (tt)
Trong dó:
Sequence: tên sequence
Increment by n : sô bước nhảy
Start with n : số bắt đầu
Maxvalue n | Nomaxvalue : giá trị lớn nhất
Minvalue n | Nominvalue : giá trị nhỏ nhấtt
Cycle| Nocycle : khi đạt đến max se quay lui
hoặc tiêp tục tăng Mặc định là Nocycle
Cache| Nocache : phát sinh vùng nhớ mặc định
cache có 20 giá trị
Trang 11Sequence của Oracle (tt)
Insert into test values(test_seq.Nextval);
- Nextval: trả về giá trị sequence kế tiếp
- Currval: trả về giá trị hiện hành của sequence
Trang 12Sequence của Oracle (tt)
Cú pháp thay đổi các giá trị trong Sequence
Trang 13END IF;
phát biểu 3;
Trang 15…
END CASE
Trang 16WHEN <điều kiện 1> THEN phát biểu 1;
WHEN <điều kiện 2> THEN phát biểu 2;
…
WHEN <điều kiện n> THEN phát biểu n;
END CASE
Trang 21Những ngoại lệ
Danh sách các lỗi ngoại lệ
Ngoại lệ do người dùng định nghĩa
41
Danh sách các lỗi ngoại lệ
NO_DATA_FOUND Không trả về dòng nào
TOW_MANY_ROW Trả về nhiều dòng
ZERO_DIVIDE Chia cho zero
LOGIN_DENIED Kết nối vào Oracle với tên và mật
khẩu không hợp lệ PROGRAM_ERROR Chương trình PL/SQL có lỗi bên
trong
Trang 22Ngoại lệ do người dùng định nghĩa
Ngoại lệ do người dùng định nghĩa phải được kích
hoạt từng minh
Khai báo ngoại lệ
Declare Tên ngoại lệException;
Ví dụ:
Declare e_invalid Exception ;
43
Ngoại lệ do người dùng định nghĩa
Declare exception_name EXCEPTION
Trang 23when e_invalid_id then
dbms_output.put_line('An id cannot be negation');
Trang 24Cho biết có bao nhiêu sinh viên đăng ký trong mỗi môn học Hiển
thị mã số môn học cho số lượng sinh viên đăng ký cho môn đó
Declarecursor course_cur is
select course_no, section_id
Trang 25 Cursor là một vùng nhớ cho phép bạn cấp phát
bộ nhớ và truy cập thông tin được trích từ một
Trang 26CURSOR(tt)
Cursor ngầm định: được tự động khai báo bở
Oracle Người dùng không nhận thấy điều khiển
xảy ra và cũng không thể điều khiển hoặc xử lý
thông tin trong cursor ngầm định
Cursor ngầm định xử lý các phát biểu INSERT,
UPDATE, DELETE và phát biểu SELECt INTO
Trong quá trình xử lý cursor ngầm định Oracle tự
động thực hiện các thao tác OPEN, FETCH,
Cursor ngầm định không cho biết có biêu nhiêu dòng
bị ảnh hưởng bởi thao tác cập nhật
: trả về số dòng được cập nhật
Trang 27CURSOR(tt)
Cursor tường minh: cung cấp nhiều khả năng điều
khiển và dễ dàng trong việc bẫy lỗi dữ liệu
Quy trình làm việc của cursor tường minh
Khai báo cursor
Trang 28• Lấy dữ liệu về từ cursor
FETCH cursor_name INTO <biến>;
hoặc
FETCH cursor_name INTO record;
Trang 29CURSOR(tt)
DECLARE Cursor C_MyCursor IS
vr_zip C_MyCursor%ROWTYPE
Begin
open c_zip;
loop
FETCH c_zip INTO vr_zip;
Trang 30FETCH c_student_name INTO vr_student_name;
EXIT WHEN c_student_name%NOTFOUND;
%ROWCOUNT Cursor_name%ROWCOUNT Trả về số lượng record
%ISOPEN Cursor_name%ISOPEN Trả về TRUE nếu cursor
Trang 31FETCH c_student INTO v_sid;
dbms_output.put_line('student id: '||v_sid);
EXIT WHEN c_student%NOTFOUND;