Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 79 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
79
Dung lượng
784 KB
Nội dung
NGÔNNGỮ THỦ TỤC PL/SQL - Lý thuyết: tiết - Thực hành: tiết ChươngNgônngữ thủ tục –PL/SQL 9-1 NGÔNNGỮ THỦ TỤC – PL/SQL 9.1 Giới thiệu PL/SQL 9.2 Con trỏ (Cursor) 9.3 Thủ tục hàm 9.4 Quản lý đối tượng lớn ChươngNgônngữ thủ tục –PL/SQL 9-2 Giới thiệu PL/SQL - Mở rộng của SQL - Mã PL/SQL lưu trữ trực tiếp csdl - Giao tiếp với csdl cho phép tích hợp lệnh SQLngônngữ lập trình sử dụng cả sởliệu lập trình ứng dụng dùng để kết hợp lệnh xử lý chuyển tác hỗ trợ nhiều thủ tục SQL đơn vị mã lệnh PL/SQL dạng khối (Begin… End) ChươngNgônngữ thủ tục –PL/SQL 9-3 Giới thiệu PL/SQL Khai báo biến Identifier [CONSTANT] datatype [NOT NULL] [:=| DEFAULT expr] Ví dụ: V_Hiredate DATE; V_DeptNo NUMBER(3) NOT NULL := 10; V_Loc VARCHAR2(13) := ‘Atlanta’; ChươngNgônngữ thủ tục –PL/SQL 9-4 Giới thiệu PL/SQL - Khai báo khối [DECLARE Khai báo biến, trỏ,…] BEGIN - Lệnh SQL; - Lệnh PL/SQL; [EXCEPTION Xử lý ngoại lệ xảy ra;] END; ChươngNgônngữ thủ tục –PL/SQL 9-5 Giới thiệu PL/SQL Ví dụ: DECLARE v VARCHAR2(5); BEGIN SELECT Ename INTO v FROM Emp; EXCEPTION WHEN others THEN Message(SQLERRM); END; ChươngNgônngữ thủ tục –PL/SQL 9-6 Giới thiệu PL/SQL Ví dụ: Lấy liệu cột DeptId cột Loc của phòng SALES bảng Dept đưa vào hai biến v_deptno v_loc Nếu có lỗi xuất xuất dòng thông báo mã lỗi hình ChươngNgônngữ thủ tục –PL/SQL 9-7 Giới thiệu PL/SQL DECLARE v_deptno NUMBER(2); v_loc VARCHAR2(15); BEGIN SELECT DeptId, Loc INTO v_deptno, v_loc FROM Dept WHERE Dname = 'SALES'; EXCEPTION WHEN others THEN Message(SQLERRM); END; ChươngNgônngữ thủ tục –PL/SQL 9-8 Giới thiệu PL/SQL Thuộc tính %Type - %Type sử dụng lưu trữ giá trị nhận được từ một bảng - đặt %Type sau tên bảng và tên cột identifier Table.column%Type; Ví dụ: DECLARE v_deptno Dept.DeptNo%Type; v_loc VARCHAR2(15); v_name Dept.Dname%Type; ChươngNgônngữ thủ tục –PL/SQL 9-9 Giới thiệu PL/SQL - Một số chú ý PL/SQL không hỗ trợ các kiểu dữ liệu mảng Biến phải được khái báo trước tham chiếu đến Kiểu dữ liệu phần khai báo có hoặc không Trong một khối lệnh các biến không được trùng tên Tên biến không được trùng với tên cột của bảng dữ liệu sử dụng khối Khởi tạo biến phải rõ NOT NULL, CONSTANT Khai báo biến hàng Khởi tạo giá trị cho biến cách sử dụng phép ChươngNgônngữ thủ tục –PL/SQL - 10 Thủ tục Sau tạo một thủ tục, sử dụng thủ tục chương trình Ví dụ: Gọi thực thủ tục change_sal với p_Percentage=15 Change_sal(15, v_err); ChươngNgônngữ thủ tục –PL/SQL - 65 Thủ tục - Huỷ bỏ thủ tục DROP PROCEDURE procedure_name; Ví dụ: DROP PROCEDURE change_sal; ChươngNgônngữ thủ tục –PL/SQL - 66 Hàm trả một giá trị tại lời gọi của - Tạo hàm CREATE [OR REPLACE] FUNCTION func_name [(argument1 [mode1] datatype1, argument2 [mode2] datatype2, )] RETURN datatype IS | AS BEGIN PL/SQL Block; END; ChươngNgônngữ thủ tục –PL/SQL - 67 Hàm Ví dụ: CREATE FUNCTION get_sal (p_Empid IN number) RETURN Number IS BEGIN SELECT sal FROM emp WHERE emp_id = p_Empid; RETURN null; EXCEPTION WHEN others THEN RETURN ‘Lỗi: ‘ || SQLERRM; END; ChươngNgônngữ thủ tục –PL/SQL - 68 Hàm - Gọi hàm Ví dụ: DECLARE v_Sal number; BEGIN v_SAL := get_sal(7934); PRINT v_Sal; END; ChươngNgônngữ thủ tục –PL/SQL - 69 Hàm - Huỷ bỏ hàm DROP FUNCTION function_name; Ví dụ: DROP FUNCTION get_sal; ChươngNgônngữ thủ tục –PL/SQL - 70 Hàm - Lợi ích việc sử dụng hàm thực các thao tác phức tạp mệnh đề của câu lệnh SQL phân tích và xử lý dữ liệu được thực Server gọi các hàm câu lệnh SQL sử dụng hàm để thao tác các kiểu dữ liệu tự tạo cho phép thực đồng thời các câu lệnh truy vấn ChươngNgônngữ thủ tục –PL/SQL - 71 Hàm - Hạn chế sử dụng hàm Phải định nghĩa hàm trước sử dụng được áp dụng cho điều kiện WHERE, áp dụng cho điều kiện HAVING Chỉ Tham số sử dụng hàm là loại IN, không chấp nhận giá trị OUT hay giá trị IN OUT Kiểu dữ liệu trả của các hàm phải là kiểu dữ liệu DATE, NUMBER, NUMBER Không cho phép hàm trả kiểu dữ liệu BOOLEAN, RECORD, TABLE Kiểu dữ liệu trả này phải tương thích với các kiểu dữ liệu bên Oracle Server.Chương Ngônngữ thủ tục –PL/SQL - 72 9.3.5 Phát triển gói (Package) - Tập các kiểu dữ liệu, biến, thủ tục và các hàm có một mối liên hệ với nhau, được gộp chung lại Tăng tính phân nhỏ các thành phần (Modularity) Đơn giản việc thiết kế ứng dụng Ẩn dấu thông tin (hiding information) Nâng cao hiệu suất sử dụng Thực chồng (overloading) (Xem giáo trình) ChươngNgônngữ thủ tục –PL/SQL - 73 9.3.6 Phát triển Triggers - Trigger là những thủ tục được thực ngầm định thực lệnh SQL đảm bảo thực tất các thao tác có liên quan tới lệnh can thiệp dữ liệu được thực sử dụng trigger đối với các thao tác trọng tâm không sử dụng trigger để thực các ràng buộc sẵn cósở dữ liệu Oracle ChươngNgônngữ thủ tục –PL/SQL - 74 9.3.6 Phát triển Triggers - Tạo TRIGGER Khi tạo trigger, cần lưu ý tới một số tiêu chí sau: Thời gian thực hiện: BEFORE, AFTER Hành động thực hiện: INSERT, UPDATE, DELETE Đối tượng tác động: bảng dữ liệu Loại trigger thực hiện: dòng lệnh hay câu lệnh Mệnh đề điều kiện thực Nội dung của trigger ChươngNgônngữ thủ tục –PL/SQL - 75 9.3.6 Phát triển Triggers - Phân loại trigger + Phân loại theo thời gian BEFORE trigger: được kích hoạt trước thực câu lệnh(INSERT hoặc UPDATE) AFTER trigger: được kích hoạt sau lệnh được thực xong INSTEAD OF trigger: cho phép người sử dụng thay đổi một cách suốt dữ liệu của một số khung nhìn mà thực thay đổi trực tiếp được ChươngNgônngữ thủ tục –PL/SQL - 76 9.3.6 Phát triển Triggers - Phân loại trigger + Phân loại theo câu lệnh kích hoạt (INSERT, UPDATE, DELETE) + phân loại theo số lần kích hoạt Mức lệnh: được kích hoạt thực câu lệnh Mức dòng dữ liệu: được kích nhiều lần ứng với dòng dữ liệu chịu ảnh hưởng thao tác thực lênh ChươngNgônngữ thủ tục –PL/SQL - 77 9.3.6 Phát triển Triggers - Tạo trigger mức câu lệnh CREATE [OR REPLACE] TRIGGER name timing event1 [OR event2 OR event3] ON table Trigger_body ChươngNgônngữ thủ tục –PL/SQL - 78 9.3.6 Phát triển Triggers - Tạo trigger mức câu lệnh Ví dụ: Tạo trigger để giới hạn dữ liệu chèn vào bảng Emp CREATE OR REPLACE TRIGER secure_emp BEFORE INSERT ON Emp BEGIN IF TO_CHAR(sysdate,’DAY’) IN (‘SAT’,’SUN’) OR TO_CHAR(sysdate,’HH24’) NOT BETWEEN ‘08’ AND ’18’ THEN RAISE_APPLICATION_ERROR (-20500, ’Invalid Time.’); END IF; - 79 END; ChươngNgônngữ thủ tục –PL/SQL ...NGÔN NGỮ THỦ TỤC – PL /SQL 9. 1 Giới thiệu PL /SQL 9. 2 Con trỏ (Cursor) 9. 3 Thủ tục hàm 9. 4 Quản lý đối tượng lớn Chương Ngôn ngữ thủ tục PL /SQL 9- 2 Giới thiệu PL /SQL - Mở rộng của SQL -... Chương Ngôn ngữ thủ tục PL /SQL Giới thiệu PL /SQL - Kiểu liệu hợp Kiểu dữ liệu Table Kiểu dữ liệu Record Thuộc tính %ROWTYPE Chương Ngôn ngữ thủ tục PL /SQL - 26 Giới thiệu PL /SQL - Kiểu liệu. .. TO MONTH PLS_INTEGER INTERVAL DAY TO SECOND BOOLEAN Chương Ngôn ngữ thủ tục PL /SQL - 11 Giới thiệu PL /SQL Khối lồng phạm vi biến Chương Ngôn ngữ thủ tục PL /SQL - 12 Giới thiệu PL /SQL - Các