Xem mẫu

  1. 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 4: Lập trình PL/SQL 1
  2. NỘI DUNG MÔN HỌC 1 Chương 1. Tổng quan CSDL phân tán (4) 2 Chương 2. Tổng quan CSDL hướng đối tượng 3 Chương 3. Cơ bản về Oracle (4) 4 Chương 4: Lập trình PL/SQL (4) 5 Chương 5: Procedure, Function (4) 6 Chương 6: Thiết kế đối tượng (6) 7 Chương 7: Truy vấn trong CSDL HĐT (4) Chương 4: Lập trình PL/SQL 2
  3. Chương 4: Lập trình PL/SQL I. Cấu trúc chương trình PL/SQL II. Các kiểu dữ liệu cơ bản của PL/SQL III. Các kiểu dữ liệu tham chiếu IV. Các loại mệnh đề V. Cấu trúc điều khiển VI. Kiểu con trỏ VII. Bài tập thực hành Chương 4: Lập trình PL/SQL 3
  4. I. Cấu trúc chương trình PL/SQL 1. Giới thiệu PL/SQL (Procedural Language/Structured Query Language) là một ngôn ngữ lập trình lập trình hướng thủ tục sử dụng cho Oracle SQL. PL/SQL là sự kết hợp giữa SQL và các khai báo hằng số, biến, cấu trúc điều khiển, thủ tục, hàm, bẫy lỗi sự kiện, thao tác con trỏ, và xử lý giao tác… Mọi thứ được lưu trữ trong DB được tái sử dụng bởi các ứng dụng bất kỳ giao tiếp với ứng dụng Oracle. Từ phiên bản 8 trở về sau có thêm các tính năng hướng đối tượng. Chương 4: Lập trình PL/SQL 4
  5. Cấu trúc PL/SQL – giới thiệu(tt) - Mỗi lệnh SQL kết thúc bằng dấu chấm phẩy (;). - PL/SQL tổ chức theo từng khối lệnh (block), mỗi khối lệnh có thể lồng nhau. Các biến có thể khai báo nội (local) bên trong khối và điều khiển báo lỗi bên trong khối nơi lỗi phát sinh. - Một block bao gồm ba phần: phần khai báo là nơi để khai báo biến, phần thi hành lệnh và phần xử lý các ngoại lệ (điều kiện lỗi hoặc cảnh báo). - Khai báo biến trong PROCEDURE hay FUNCTION: nếu là Block ngoài cùng (đầu tiên) của PROCEDURE, FUNCTION thì không dùng từ khóa DECLARE (Ngược lại với TRIGGER, Block ngoài cùng (đầu tiên) phải có DECLARE). Chương 4: Lập trình PL/SQL 5
  6. Cấu trúc PL/SQL (tt) 2. Cấu trúc PL/SQL --- Block 1 Các khai báo biến của Block 1 (Declarations) BEGIN Các câu lệnh thực hiện (Executable Statements) DECLARE /*Phần Khai báo biến Block 2*/ --- Block 2 Các khai báo biến của Block 2 (Declarations) BEGIN Các câu lệnh thực hiện (Executable Statements) EXCEPTION Các xử lý ngoại lệ (Exception Handlers) /*làm gì nếu lỗi xuất hiện bên trong Block 2*/ END; --- End Block 2 EXCEPTION Các xử lý ngoại lệ (Exception Handlers) END; --- End Block 1 Chương 4: Lập trình PL/SQL 6
  7. Cấu trúc PL/SQL- VD (tt) declare x SINHVIEN.MASV%type; y SINHVIEN.HOTENSV%type; Lưu ý: begin Chạy lệnh select MASV, HOTENSV SET SERVEROUTPUT ON trong SQL*Plus trước. into x,y Lúc đó lệnh DBMS_OUTPUT.PUT_LINE… from SINHVIEN mới có hiệu lực in text “…….” ra where MASV='SV001'; màn hình dbms_output.put_line ('Ma SV:' || x || ' - Ho ten SV:' || y); end; Chương 4: Lập trình PL/SQL 7
  8. II. Kiểu dữ liệu trong PL/SQL 1. Các kiểu dữ liệu cơ bản như sau: - BINARY_INTEGER: từ -231 đến 231-1 - NUMBER [(precision, scale)]: precision
  9. Các kiểu dữ liệu cơ bản (tt) - DATE: thế kỷ, năm, tháng, ngày, giờ, phút, giây - CHAR (max_length): kiểu ký tự - VARCHAR2 (max_length): max_length
  10. Kiểu dữ liệu (tt) 2. Khai báo - Khai báo biến: Diem FLOAT; - Khai báo hằng: heso CONSTANT NUMBER(3,2) := 1.86; - Với các kiểu dữ liệu trong Oracle như NUMBER, CHAR, VARCHAR2, DATE, LONG,… PL/SQL cho phép như BOOLEAN. Ghi chú: Ký hiệu := được sử dụng như là toán tử gán. Chương 4: Lập trình PL/SQL 10
  11. Kiểu dữ liệu - gán (tt) - Gán biến và biểu thức: biến := biểu thức; Ví dụ: x := UPPER ('Nguyen'); y := 100; kinhphi := kinhphi + kinhphi * 10/100; Ví dụ: kq BOOLEAN; --không có column kiểu boolean, -- chỉ có kiểu dữ liệu Boolean trong PL/SQL kq := kinhphi >20; - Độ ưu tiên của toán tử: ** (phép lũy thừa), NOT, *, /, +, -, || (phép nối chuỗi), =, !=, , =, IS NULL, LIKE, BETWEEN, IN, AND, OR. Chương 4: Lập trình PL/SQL 11
  12. Kiểu dữ liệu (tt) 3. Nhập xuất dữ liệu - Lệnh xuất: DBMS_OUTPUT.PUT_LINE ('Nội dung'); Lưu ý: trước khi thực hiện lệnh xuất ta phải chạy lệnh SET SERVEROUTPUT ON - Lệnh nhập: 2 cách để nhập giá trị cho biến  Biến thay thế &: dấu & đặt trước biến. Biến được nhập giá trị lúc thực thi.  Biến thay thế &&: dấu && đặt trước biến. Giá trị nhập vào được lưu trữ cho những lần sau. Lưu ý: Biến kiểu chuỗi, kiểu ngày đặt trong cặp dấu ' ' VD: a char(5):= '&a'; Chương 4: Lập trình PL/SQL 12
  13. Kiểu dữ liệu – Nhập xuất (tt) Ví dụ: --SET SERVEROUTPUT ON; DECLARE x number; BEGIN x:=&x; DBMS_OUTPUT.PUT_LINE('Gia tri x ='); DBMS_OUTPUT.PUT_LINE(x); -- DBMS_OUTPUT.PUT_LINE ('Gia tri x = '|| -- TO_CHAR(X)); END; Chương 4: Lập trình PL/SQL 13
  14. III. Kiểu dữ liệu tham chiếu 1. Tham chiếu kiểu %TYPE Dùng để khai báo một biến mà nó tham chiếu đến một cột trong CSDL. Khai báo: %TYPE --SET SERVEROUTPUT ON; DECLARE Kinhphi_nhonhat DETAI.Kinhphi%TYPE; BEGIN SELECT MIN(DT.Kinhphi) INTO Kinhphi_nhonhat FROM DETAI DT; DBMS_OUTPUT.PUT_LINE(Kinhphi_nhonhat); END; Chương 4: Lập trình PL/SQL 14
  15. Kiểu dữ liệu tham chiếu (tt) 2. Tham chiếu kiểu %ROWTYPE Dùng để khai báo một biến mà nó tham chiếu đến một dòng trong cơ sở dữ liệu (Có cấu trúc như một dòng trong Table). Khai báo: %ROWTYPE --SET SERVEROUTPUT ON; DECLARE row_detai DETAI%ROWTYPE; BEGIN SELECT * INTO row_detai FROM detai WHERE MADT= 'DT001'; DBMS_OUTPUT.PUT_LINE(row_detai.MADT || ' : ' || row_detai.TENDT ); END; Chương 4: Lập trình PL/SQL 15
  16. Kiểu dữ liệu tham chiếu (tt) 3. Tham chiếu kiểu %TABLE Dùng để khai báo một biến mà nó tham chiếu đến một bảng trong CSDL (Có cấu trúc như một Table). Khai báo: TYPE IS TABLE OF [NOT NULL] INDEX BY BINARY_INTEGER; ; Chương 4: Lập trình PL/SQL 16
  17. Kiểu dữ liệu tham chiếu - table(tt) Ví dụ: --SET SERVEROUTPUT ON; DECLARE TYPE detai_type IS TABLE OF detai%ROWTYPE INDEX BY BINARY_INTEGER; bangdt detai_type; BEGIN SELECT * INTO bangdt(1) FROM DETAI WHERE MADT = 'DT001 '; DBMS_OUTPUT.PUT_LINE(bangdt(1).MADT || ' : ' || bangdt(1).TENDT || ' : ' || bangdt(1).CHUNHIEM); END; Chương 4: Lập trình PL/SQL 17
  18. IV. Các mệnh đề 1. Mệnh đề Select SELECT INTO [cursor_var] FROM BẢNG1, BẢNG2,.. WHERE DECLARE vMASV SINHVIEN.MASV%TYPE; vHOTENSV SINHVIEN.HOTENSV%TYPE; BEGIN SELECT MASV, HOTENSV INTO vMASV, vHOTENSV FROM SINHVIEN WHERE MASV= ' SV002 ' ; DBMS_OUTPUT.PUT_LINE (vMASV|| ' : ' || vHOTENSV); END; Chương 4: Lập trình PL/SQL 18
  19. Các mệnh đề (tt) 2. Mệnh đề INSERT | UPDATE | DELETE DECLARE MAKH CHAR(2); TENKH VARCHAR2(40); BEGIN MAKH := 'TT'; TENKH := 'Su pham Toan - Tin'; INSERT INTO KHOA (MAKH, TENKH) VALUES (MAKH, TENKH); EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE (SQLERRM); END; Chương 4: Lập trình PL/SQL 19
  20. V. Các cấu trúc điều khiển 1. Rẽ nhánh IF Cú pháp: IF THEN ; ELSE IF THEN ; ELSE …; END IF; END IF; Chương 4: Lập trình PL/SQL 20
nguon tai.lieu . vn