Tải bản đầy đủ (.pdf) (79 trang)

bài giảng cơ sở dữ liệu quan hệ và sql- chương 9: ngữ thủ tục- ps/sql - cđ cntt hữu nghị việt hàn

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (768 KB, 79 trang )

Chương 9. Ngôn ngữ thủ tục –PL/SQL
9 - 1
Chương 9 NGÔN NGỮ THỦ TỤC -
PL/SQL
- Lý thuyết: 6 tiết
- Thực hành: 6 tiết
Chương 9. Ngôn ngữ thủ tục –PL/SQL
9 - 2
9.1 Giới thiệu PL/SQL
9.2 Con trỏ (Cursor)
9.3 Thủ tục và hàm
9.4 Quản lý đối tượng lớn
NGÔN NGỮ THỦ TỤC – PL/SQL
Chương 9. Ngôn ngữ thủ tục –PL/SQL
9 - 3
- Mở rộng của SQL
- Mã PL/SQL lưu trữ trực tiếp trong csdl
- Giao tiếp với csdl

cho phép tích hợp lệnh SQL và các ngôn ngữ lập trình.

sử dụng cả trong cơ sở dữ liệu và lập trình ứng dụng.

dùng để kết hợp các lệnh xử lý chuyển tác.

hỗ trợ nhiều thủ tục hơn SQL.

đơn vị mã lệnh PL/SQL là dạng khối (Begin… End).
Giới thiệu PL/SQL
Chương 9. Ngôn ngữ thủ tục –PL/SQL
9 - 4


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’;
Giới thiệu PL/SQL
Chương 9. Ngôn ngữ thủ tục –PL/SQL
9 - 5
- Khai báo khối
[DECLARE
Khai báo biến, con trỏ,…]
BEGIN
- Lệnh SQL;
- Lệnh PL/SQL;
[EXCEPTION Xử lý ngoại lệ xảy ra;]
END;
Giới thiệu PL/SQL
Chương 9. Ngôn ngữ thủ tục –PL/SQL
9 - 6
DECLARE
v VARCHAR2(5);
BEGIN
SELECT Ename
INTO v
FROM Emp;
EXCEPTION
WHEN others THEN
Message(SQLERRM);

END;
Giới thiệu PL/SQL
Ví dụ:
Chương 9. Ngôn ngữ thủ tục –PL/SQL
9 - 7
Ví dụ: Lấy dữ liệu cột DeptId và cột Loc của phòng SALES trong
bảng Dept đưa vào hai biến v_deptno và v_loc. Nếu có lỗi xuất hiện
thì xuất dòng thông báo mã lỗi ra màn hình.
Giới thiệu PL/SQL
Chương 9. Ngôn ngữ thủ tục –PL/SQL
9 - 8
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;
Giới thiệu PL/SQL
Chương 9. Ngôn ngữ thủ tục –PL/SQL
9 - 9
Thuộc tính %Type
- %Type sử dụng khi lưu trư˜ giá trị nhận được từ một bảng
- đặt %Type ngay 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;
Giới thiệu PL/SQL
Chương 9. Ngôn ngữ thủ tục –PL/SQL
9 - 10
- 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 khi tham chiếu đến.
 Kiểu dữ liệu trong phần khai báo có thể 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 trong khối.

Khởi tạo biến phải chỉ rõ như NOT NULL, CONSTANT.

Khai báo mỗi biến trên 1 hàng.

Khởi tạo giá trị cho biến bằng cách sử dụng phép gán (:=)
hoặc từ khóa DEFAULT
Giới thiệu PL/SQL
Chương 9. Ngôn ngữ thủ tục –PL/SQL
9 - 11
Các kiểu dữ liệu thông dụng
Giới thiệu PL/SQL
CHAR [(max_lenght)]

VARCHAR2 (max_lenght)
LONG
LONG RAW
NUMBER[(precision, scale)]
BINARY_INTEGER
PLS_INTEGER
BOOLEAN
DATE
TIMESTAMP
TIMESTAMP WITH TIME
ZONE
TIMESTAMP WITH LOCAL
TIME ZONE
INTERVAL YEAR TO MONTH
INTERVAL DAY TO SECOND
Chương 9. Ngôn ngữ thủ tục –PL/SQL
9 - 12
Khối lồng nhau và phạm vi biến
Giới thiệu PL/SQL
Chương 9. Ngôn ngữ thủ tục –PL/SQL
9 - 13
- Các phép toán
 Logic
 Toán học
 Ghép nối (Concatenation)

Số mũ (**)

Dùng dấu ngoặc đơn để điều khiển thứ tự ưu tiên.
Ví dụ: Tăng biến đếm cho vòng lặp.

v_count := v_count + 1;
Giới thiệu PL/SQL
Chương 9. Ngôn ngữ thủ tục –PL/SQL
9 - 14
- Câu lệnh SQL trong PL/SQL
Một số điểm cần lưu ý

Cần phần biệt từ khóa END của khối lệnh và END của
câu lệnh điều khiển chuyển tác.

PL/SQL không hô˜ trợ trực tiếp các câu lệnh ngôn ngư˜
định nghĩa dư˜ liệu (DDL) như CREATE TABLE, ALTER
TABLE, DROP TABLE.
 PL/SQL không hô˜ trợ các câu lệnh ngôn ngư˜ điều khiển
dư˜ liệu (DCL) như GRANT, REVOKE.
Giới thiệu PL/SQL
Chương 9. Ngôn ngữ thủ tục –PL/SQL
9 - 15
- Câu lệnh SELECT trong PL/SQL
SELECT select_list
INTO {variable [, variable]…| record_name}
FROM table
[WHERE condition];
Giới thiệu PL/SQL
Chương 9. Ngôn ngữ thủ tục –PL/SQL
9 - 16
- Câu lệnh SELECT trong PL/SQL
Ví dụ: Lấy dư˜ liệu cột DeptId và cột Loc của phòng SALES
trong bảng Dept.
DECLARE

v_deptno NUMBER(4);
v_loc_id Dept.loc_id%Type;
BEGIN
SELECT Deptid, Locid
INTO v_deptno, v_loc_id
FROMDept
WHERE Dname=‘Sales’;

END;
Giới thiệu PL/SQL
Chương 9. Ngôn ngữ thủ tục –PL/SQL
9 - 17
- Chèn dữ liệu
Ví dụ: Thêm một nhân viên vào trong cơ sở dữ liệu.

BEGIN
INSERT INTO Emp
(Empid, Fname, Email, Hireday, Jobid, Salary)
VALUES (emp_seq.NEXTVAL, ‘Ruth’,
‘’, sysdate, ‘SALES’, 4000);
END;
Giới thiệu PL/SQL
Chương 9. Ngôn ngữ thủ tục –PL/SQL
9 - 18
- Cập nhật dữ liệu
Ví dụ: Tăng lương thêm $100 cho những nhân viên có mã
công việc là ST_CLERKS.
DECLARE
v_sal_increase Emp.Salary%TYPE := 100;
BEGIN

UPDATE Emp
SET Salary = Salary + v_sal_increase
WHERE Jobid = ‘ST_CLERK’;
END;
Giới thiệu PL/SQL
Chương 9. Ngôn ngữ thủ tục –PL/SQL
9 - 19
- Xóa dư˜ liệu
Ví dụ: Xóa những hàng có Job_id là ST_CLERKS.
DECLARE
v_name Emp.Job_id%TYPE := ‘ST_CLERKS’;
BEGIN
DELETE FROM Emp
WHERE Job_id = v_name;
END;
Giới thiệu PL/SQL
Chương 9. Ngôn ngữ thủ tục –PL/SQL
9 - 20
- Câu lệnh kết hợp
Ví dụ: Chèn hoặc cập nhật dữ liệu trong bảng copy_emp phù
hợp với bảng emp.
DECLARE
v_empno emp.Emp_id%TYPE:=100;
BEGIN
MERGE INTO copy_emp c
USING Emp e
ON (c.Emp_id=v_empno)
WHEN MATCHED THEN
UPDATE SET c.Emp_id=e.Emp_id, c.Ename=e.Ename
c.Job_id=e.Job_id, c.salary=e.salary

WHEN NOT MATCHED THEN
INSERT VALUES(e.Empid, e.fname, e.Hireday, e.Jobid, e.salary,
e.manageid);
END;
Giới thiệu PL/SQL
Chương 9. Ngôn ngữ thủ tục –PL/SQL
9 - 21
- Cấu trúc điều khiển (
Tương tự C++)
Ví dụ: Gán một trong các chuỗi ‘Excellent’, ‘Very good’, ‘Good’
và ‘No such grade’ cho biến v_app dựa vào biến v_grade.
DECLARE
v_grade CHAR(1):=UPPER(&grade);
v_app VARCHAR2(20);
BEGIN
v_app:= CASE v_grade
WHEN ‘A’ THEN ‘Excellent’
WHEN ‘B’ THEN ‘Very good’
WHEN ‘C’ THEN ‘Good’
ELSE ‘No such grade’
END;
END;
Giới thiệu PL/SQL
Chương 9. Ngôn ngữ thủ tục –PL/SQL
9 - 22
- Lệnh lặp không định trước
LOOP
statements;
EXIT WHEN condition;
END LOOP;

- Lệnh lặp WHILE
WHILE condition LOOP
statements;
END LOOP;
Giới thiệu PL/SQL
Chương 9. Ngôn ngữ thủ tục –PL/SQL
9 - 23
- Lệnh lặp FOR
FOR counter IN [REVERSE] from … to LOOP
statements;
END LOOP;
Ví dụ: Chèn thêm 3 hàng mới vào bảng Locations
Giới thiệu PL/SQL
Chương 9. Ngôn ngữ thủ tục –PL/SQL
9 - 24
- Lệnh lặp FOR
FOR counter IN [REVERSE] from … to LOOP
statements;
END LOOP;
Ví dụ: Chèn thêm 3 hàng mới vào bảng Locations
Giới thiệu PL/SQL
Chương 9. Ngôn ngữ thủ tục –PL/SQL
9 - 25
DECLARE
v_country_id locations.Country_id%TYPE:=‘CA’;
v_locatin_id locations.Loc_id%TYPE;
v_city locations.City%TYPE:=‘Montreal’;
BEGIN
SELECT MAX(Loc_id) INTO v_location_id
FROM locations

WHERE Country_id=v_contry_id;
FOR i IN 1 3 LOOP
INSERT INTO locations(Loc_id, City, Country_id)
VALUES((vlocation_id + i),v_city, v_country_id);
v_counter:=v_counter+1;
END LOOP;
END;
Giới thiệu PL/SQL

×