Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 13 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
13
Dung lượng
228,54 KB
Nội dung
Bảo Mật Hệ Thống Thông Tin Lab Bài thực hành số PL/SQL (1) Tóm tắt nội dung: Khái niệm PL/SQL Các vấn đề liên quan đến kiểu liệu PL/SQL Hằng Biến Cấu trúc khối PL/SQL Các câu lệnh điều khiển I PL/SQL ? PL/SQL (PL : Procedural Language – Ngôn ngữ Thủ tục) mở rộng SQL, kết hợp vào nhiều đặc tính ngơn ngữ lập trình gần Nó cho phép thao tác liệu câu lệnh query SQL bao gồm đoạn mã có cầu trúc khối tính thủ tục (block-structure and procedural unit of code), làm cho PL/SQL thành ngôn ngữ xử lý giao dịch mạnh mẽ Chương Trình Đào Tạo Từ Xa KH & KT Máy Tính – Đại học Bách Khoa TP.HCM Bảo Mật Hệ Thống Thông Tin Lab II Các lệnh SQL PL/SQL PL/SQL cung cấp số câu lệnh thủ tục cho việc thao tác kiểm tra liệu, thường không cần phải dính dáng với lệnh SQL Dù vậy, cần lấy thống tin từ CSDL thay đổi CSDL nên dùng SQL PL/SQL hỗ trợ tốt cho đa số lệnh DML lệnh điều khiển giao dịch SQL Ngoài ra, câu lệnh SELECT dùng để gán giá trị query từ hàng bảng cho biến Một số điểm lưu ý: Một khối PL/SQL đơn vị giao dịch (transaction unit) – lệnh COMMIT ROLLBACK độc lập với khối nằm Mỗi câu lệnh SQL cần phải kết thúc dấu chấm phẩy Câu lệnh SELECT dùng để gán giá trị query từ hàng bảng cho biến Các câu lệnh SELECT mà không trả lại hàng gây lỗi cần phải giải (thường phải dùng phương pháp xử lý ngoại lệ cursor) Các lệnh DDL không dùng PL/SQL Ví dụ: - Tất lệnh bắt đầu ALTER, CREATE, DROP, FLASHBACK - Các lệnh quản lý quyền: GRANT, REVOKE - Các lệnh audit: AUDIT, NOAUDIT (và cịn nhiều lệnh khác) Các lệnh DML xử lý nhiều hàng (multiple rows) III Kiểu liệu PL/SQL hỗ trợ nhiều kiểu liệu để khai báo biến Có thể gán giá trị ban đầu cho biến khai báo biến thay đổi giá trị chúng thông qua phát biểu gán sau khối Các danh hiệu (identifier) lưu giữ giá trị cố định giá trị phải gán cho khai báo Các kiểu liệu: Dữ liệu số: NUMBER Ví dụ: NUMBER(7,2) Chương Trình Đào Tạo Từ Xa KH & KT Máy Tính – Đại học Bách Khoa TP.HCM Bảo Mật Hệ Thống Thông Tin Lab Nghĩa có ký số có ký số sau dấu thập phân Nếu ta không khai báo độ xác câu lệnh độ xác mặc định 38 ký số Dữ liệu luận lí: BOOLEAN Dữ liệu ngày tháng: DATE Dữ liệu chuỗi: VARCHAR2 Lưu trữ liệu ký tự có chiều dài thay đổi Chiều dài mặc định ký tự Chiều dài tối đa 32767 Ví dụ: VARCHAR2(30) CHAR PL/SQL Version 1: giống VARCHAR2 chiều dài tối đa 255 PL/SQL Version 2: chuỗi ký tự chiều dài cố định dài tối đa 32767 byte Khi so sánh hai chuỗi với ký tự trống thêm vào Chú ý: Khi so sánh chuỗi CHAR PL/SQL Version hai chuỗi không thêm vào ký tự trống, ví dụ biến kiểu CHAR chứa ‘FRED’ khác với biến kiểu CHAR chứa ‘FRED ’ IV Khai báo biến Khai báo biến Các biến PL/SQL khai báo gán giá trị ban đầu phần DECLARE khối Các biến khác tham khảo đến phần khai báo chúng phải khai báo phát biểu trước Cú pháp: identifier datatype [(precision, scale)] [NOT NULL] [ := expression]; identifier - tên biến datatype - kiểu liệu biến precision - chiều dài biến (số ký số phần nguyên phần thập phân) scale - số số lẻ (số ký số phần thập phân) Chương Trình Đào Tạo Từ Xa KH & KT Máy Tính – Đại học Bách Khoa TP.HCM Bảo Mật Hệ Thống Thông Tin Lab Nếu không gán giá trị ban đầu cho biến biến chứa giá trị NULL gán giá trị Ràng buộc NOT NULL không dùng trường hợp Ví dụ: v_count NUMBER NOT NULL := 0; v_saraly NUMBER(7,2); v_annsal NUMBER(9,2) := month_sal * 12; month_sal phải tồn trước postcost CHAR(7); surname VARCHAR2(25) := ‘Skywalker’; v_message VARCHAR2(80) := ‘Data is wrong !’; married BOOLEAN := FALSE; today DATE := SYSDATE; Không nên đặt tên biến trùng tên với tên cột bảng dùng khối Nếu biến phát biểu SQL có tên với tên cột, Oracle xem tên tên cột (mà tên biến) Ví dụ: DECLARE bonus NUMBER(8,2); emp_id NUMBER(6) := 100; BEGIN SELECT salary * 0.10 INTO bonus FROM employees WHERE employee_id = emp_id; END; Khai báo Cú pháp: identifier CONSTANT datatype [(precision,scale)] := expression; Ví dụ: pi CONSTANT NUMBER(9,5) := 3.14159; vat CONSTANT NUMBER(4,2) := 17.5; Chương Trình Đào Tạo Từ Xa KH & KT Máy Tính – Đại học Bách Khoa TP.HCM Bảo Mật Hệ Thống Thông Tin Lab Chú ý: Có thề dung từ khóa %TYPE để dùng kiểu với cột định table Ví dụ: biến product_type có kiểu với cột price bảng products: product_price products.price%TYPE; V Các biến kết hợp SQL*Plus SQL*Plus hỗ trợ biến kết hợp (bind variable) Đây biến dùng để gửi giá trị vào hay khối PL/SQL Cú pháp: VARIABLE variable_name [NUMBER | CHAR | CHAR(n) | VARCHAR2 | VARCHAR2(n) ] Ví dụ : VARIABLE deptnum NUMBER; /*Chúng dùng khối PL/SQL với dấu chấm phía trước */ BEGIN SELECT DEPTNO INTO :deptnum FROM DEPT WHERE DNAME = ‘ACCOUNTING’; INSERT INTO RESULTS VALUES( :deptnum); END; Trong ví dụ trên, giá trị DEPTNO lấy gán cho biến deptnum Sau ghi vào bảng RESULTS Sau chạy xong khối PL/SQL, bạn hiển thị giá trị biến kết hợp lệnh PRINT : SQL> PRINT deptnum DEPTNUM 10 VI Hàm chuyển đổi kiểu TO_CHAR Chương Trình Đào Tạo Từ Xa KH & KT Máy Tính – Đại học Bách Khoa TP.HCM Bảo Mật Hệ Thống Thông Tin TO_DATE TO_NUMBER Chương Trình Đào Tạo Từ Xa Lab KH & KT Máy Tính – Đại học Bách Khoa TP.HCM Bảo Mật Hệ Thống Thông Tin Lab Ví dụ : v_message VARCHAR2(80) := ‘SCOTT earns ‘ || TO_CHAR (month_sal * 12); VII Độ ưu tiên toán tử Toán tử Đầu tiên Tác vụ Toán tử mũ, phủ định **, NOT luận lý +, - Đồng nhất, dấu âm *, / Nhân, chia +, -, || Cộng, trừ, nối chuỗi =, !=, , =, IS NULL, LIKE, BETWEEN, IN Cuối So sánh AND Giao OR Hội VIII Cấu trúc khối Cú pháp: [ DECLARE declaration_statements ] BEGIN executable_statements [ EXCEPTION exception_handling_statements ] END; DECLARE EXCEPTION phần tự chọn, có vài khối khơng có phần Chương Trình Đào Tạo Từ Xa KH & KT Máy Tính – Đại học Bách Khoa TP.HCM Bảo Mật Hệ Thống Thơng Tin Lab Ví dụ: (ví dụ command line) SQL> DECLARE x NUMBER(7,2); BEGIN SELECT sal INTO x FROM emp WHERE empno=&&n; IF x THEN message := 'count is positive'; IF area > THEN message := 'count and area are positive'; END IF; ELSIF count = THEN message := 'count is zero'; ELSE message := 'count is negative'; END IF; X Vòng lặp Vòng lặp Cú pháp: LOOP statements END LOOP; Mỗi lần dịng chương trình gặp phải END LOOP quyền điều khiển trả LOOP Vịng lặp khơng điều khiển lặp mãi thân khơng có lệnh nhảy khỏi Một vịng lặp kết thúc từ bên dùng câu lệnh EXIT EXIT cho phép điều khiển chuyển cho câu lệnh sau END LOOP kết thúc vòng lặp Cú pháp : EXIT [loop-label] [WHEN condition]; EXIT tác vụ nằm câu lệnh IF đứng vịng lặp Khi đứng mệnh đề WHEN dùng để kết thúc có điều kiện Chương Trình Đào Tạo Từ Xa KH & KT Máy Tính – Đại học Bách Khoa TP.HCM Bảo Mật Hệ Thống Thơng Tin Lab Ví dụ 1: LOOP counter := counter + 1; INSERT INTO numbered_rows VALUES (counter); … IF counter = 10 THEN COMMIT; EXIT; END IF; END LOOP; Ví dụ : LOOP … EXIT WHEN total_sals = 60000; … END LOOP; Cách ngắt vòng lặp khác rẽ nhánh đến nhãn ngồi vịng lặp, dùng lệnh GOTO Nhưng khơng phải cách viết có cấu trúc Vịng lặp WHILE Cú pháp : WHILE condition LOOP statements END LOOP; Điều kiện (condition) tính tốn điểm bắt đầu vòng lặp vòng lặp kết thúc điều kiện FALSE Nếu điều kiện FALSE lúc bắt đầu vào đến vịng lặp vịng lặp khơng xảy Ví dụ: counter := 0; WHILE counter < LOOP counter := counter + 1; END LOOP; Chương Trình Đào Tạo Từ Xa KH & KT Máy Tính – Đại học Bách Khoa TP.HCM 10 Bảo Mật Hệ Thống Thông Tin Lab Vòng lặp FOR Cú pháp: FOR loop_variable IN [REVERSE] lower_bound upper_bound LOOP statements END LOOP; Ví dụ: FOR count2 IN LOOP DBMS_OUTPUT.PUT_LINE(count2); END LOOP; Điều khiển vịng lặp lồng Thơng thường, vịng lặp kết thúc khơng kết thúc vịng lặp ngồi (ngoại trừ có lỗi) Dù vậy, vịng lặp gán nhãn kết thúc vịng lặp ngồi lệnh EXIT Các nhãn PL/SQL định nghĩa sau : > Ví dụ : LOOP … LOOP … vịng lặp EXIT main WHEN total_done=’YES’; khỏi vịng lặp EXIT WHEN innder_done=’YES’; … END LOOP; END LOOP main; Ngồi nhãn cịn dùng để định danh vịng lặp chúng có cấu trúc lồng Chương Trình Đào Tạo Từ Xa KH & KT Máy Tính – Đại học Bách Khoa TP.HCM 11 Bảo Mật Hệ Thống Thơng Tin Lab Ví dụ: DECLARE var1 NUMBER; BEGIN DECLARE var1 NUMBER := 400; BEGIN biến var1 khối block1 tăng lên block1.var1 := block1.var1 + 1; END block2; END block1; XI Bài tập Trong tập đây, bạn tạo khối PL/SQL buffer SQL*Plus sau lưu chúng xuống file tạo file riêng trình soạn thảo khác Trong nhiều tập, bạn cần phải lưu trữ kết bảng, giả thiết bảng chung MESSAGES dùng Nó định nghĩa sau : Table MESSAGES Column Description - NUMCOL1 NUMBER (9,2) NUMCOL2 NUMBER (9,2) CHARCOL1 VARCHAR2 (60) CHARCOL2 VARCHAR2 (60) DATECOL1 DATE DATECOL2 DATE Tạo khối dùng biểu thức PL/SQL đơn giản, khai báo biến : V_BOOL1 Boolean V_BOOL2 Boolean V_CHAR Character (chiều dài thay đổi) V_NUM Number Chương Trình Đào Tạo Từ Xa KH & KT Máy Tính – Đại học Bách Khoa TP.HCM 12 Bảo Mật Hệ Thống Thông Tin Lab Sau gán cho giá trị sau : Variable Value - V_CHAR Câu ’42 is the answer’ V_NUM Hai ký tự đầu từ V_CHAR V_BOOL1 TRUE FALSE (tùy vào V_NUM có nhỏ lơn 100 hay V_BOOL2 Ngược lại với V_BOOL1 không) Tạo chạy khối PL/SQL nhận biến SQL*Plus Biến cần phải lũy thừa lên với số mũ số thứ hai kết gán cho biến PL/SQL Lưu kết bảng MESSAGES biến kết hợp (bind) SQL*Plus Viết khối PL/SQL để chèn hàng vào bảng MESSAGES với NUMCOL1 có giá trị hàng chèn vào, hàng thứ 2, … Không chèn hàng vào đếm đến khỏi vịng lặp sau sau chèn đến 10 COMMIT kết thúc vòng lặp Chương Trình Đào Tạo Từ Xa KH & KT Máy Tính – Đại học Bách Khoa TP.HCM 13 .. .Bảo Mật Hệ Thống Thông Tin Lab II Các lệnh SQL PL/ SQL PL/ SQL cung cấp số câu lệnh thủ tục cho việc thao tác kiểm tra liệu, thường khơng cần phải dính dáng với lệnh SQL Dù vậy, cần lấy thống. .. dài biến (số ký số phần nguyên phần thập phân) scale - số số lẻ (số ký số phần thập phân) Chương Trình Đào Tạo Từ Xa KH & KT Máy Tính – Đại học Bách Khoa TP.HCM Bảo Mật Hệ Thống Thông Tin Lab... Đại học Bách Khoa TP.HCM Bảo Mật Hệ Thống Thông Tin TO_DATE TO_NUMBER Chương Trình Đào Tạo Từ Xa Lab KH & KT Máy Tính – Đại học Bách Khoa TP.HCM Bảo Mật Hệ Thống Thông Tin Lab Ví dụ : v_message