Anh em có cơ hội làm việc với hệ cơ sở dữ liệu Oracle sẽ không còn lạ lẫm gì với PL/SQL. Nhưng kiến trúc cụ thể của PL/SQL là gì? PLSQL có ưu nhược điểm gì không?
Bài viết dành cho anh em mới tập tành sử dụng PL/SQL nhưng cũng vô cùng bổ ích cho anh em đã có thời gian dài sử dụng.
1. PL/SQL là gì?
Về SQL thì anh em không còn lạ lẫm gì. SQL là viết tắt của Structural Query Language (ngôn ngữ truy vấn có cấu trúc). Vậy PL trong PL/SQL là gì?
PL ở đây là Procedural Language extensions (phần mở rộng ngôn ngữ thủ tục). Bản thân SQL là cách thức giao tiếp chuẩn để làm việc với các hệ cơ sở dữ liệu RDBMS.
PL/SQL là thành phần mở rộng thêm. Thành phần này giúp khắc phục một số hạn chế của SQL, bênh cạnh đó PL/SQL cũng cung cấp các giải pháp ngôn ngữ lập trình toàn diện hơn giúp xây dựng các ứng dụng dựa trên hệ cơ sở dữ liệu Oracle.
Chính bởi mục đích khắc phục một số hạn chế cố hữu của SQL nên PL/SQL là một ngôn ngữ bậc cao. Anh em có thể xem nó như là một ngôn ngữ lập trình.
2. Đôi điều lưu ý về PL/SQL
Sau khi đã nắm được PL/SQL là phần mở rộng hơn của SQL, sử dụng để giao tiếp với hệ cơ sở dữ liệu Oracle. Tiếp theo đây sẽ là một vài lưu ý nhỏ cho anh em khi sử dụng PL/SQL
2.1 Embedded language – Ngôn ngữ nhúng
PL/SQL là ngôn ngữ nhúng, bản thân nó chỉ có thể thực thi trong hệ cơ sở dữ liệu Oracle. Do không thể hoạt động độc lập, anh em đừng nhầm lẫn nó với các ngôn ngữ lập trình khác như Java, C++.
Cũng chính vì phụ thuộc vào hệ cơ sở dữ liệu Oracle nên anh em khi sử dụng RDBMS khác như Postgres hay Maria, PL SQL lúc đó không có ý nghĩa gì nữa đâu nha.
Tham khảo việc làm Oracle hấp dẫn trên TopDev
2.2 Hiệu suất cao
Bản thân PL/SQL là ngôn ngữ sinh ra để giao tiếp với hệ cơ sở dữ liệu. Nên so về hiệu suất, ở đây chưa bàn tới hiệu suất thực thi vì nó phụ thuộc vào hệ cơ sở dữ liệu.
Nếu chỉ so sánh về hiệu suất cách viết, độ dễ để viết thì PL/SQL hơn hẳn các ngôn ngữ khác như Java, Python, C++. Mặc dù các ngôn ngữ này đều có thể thao tác với hệ cơ sở dữ liệu thông qua ODBC.
Ngoài ra, nếu nói về hiệu suất, PL/SQL cung cấp FORALL, sử dụng FORALL sẽ mang lại hiệu suất tốt hơn so với việc thao tác bằng các ngôn ngữ khác.
TheFORALL
statement issues a series ofINSERT
,UPDATE
, orDELETE
statements, usually much faster than an equivalentFOR
loop. Câu lệnh forall đưa ra một loạt câu lệnh INSERT, UPDATE hoặc DELETE, thường nhanh hơn nhiều so với vòng lặp for tương đương
3. Kiến trúc PL/SQL
Sơ bộ anh em có thể hình dung PL/SQL là ngôn ngữ hỗ trợ nằm ngoài Oracle, bằng cách nào đó ngôn ngữ viết bằng PL/SQL có thể được dịch ra thành SQL để thực thi ở hệ cơ sở dữ liệu Oracle. Vậy cụ thể kiến trúc PL/SQL như thế nào?
Theo như hình kiến trúc phía trên, PL/SQL sẽ chịu trách nhiệm biên dịch code anh em viết thành byte-code. Một đoạn code từ PL/SQL block được gửi tới PL/SQL Engine, đoạn code sẽ được biên dịch và thực thi ở Oracle Database Server.
4. Ưu nhược điểm của PL/SQL
4.1 Ưu điểm
- PL/SQL cung cấp hiệu suất tốt hơn (cái này trong một vài trường hợp cụ thể thôi nha, không phải lúc nào cũng thế)
- PL/SQL hỗ trợ Object-Oriented Programming concepts (nguyên lý lập trình hướng đối tượng), cho phép kế thừa, …) cái này tiện lợi cho anh em lập trình đã nắm vững nguyên lý OOP.
- PL/SQL hỗ trợ nhiều công cụ phát triển Web (Web application)
4.2 Nhược điểm
- Cái này thì chắc là xưa cũ rồi vì giờ máy anh em nào cũng mạnh. PL/SQL cần bộ nhớ nhiều (chạy tốn ram khá là khủng khiếp nha)
- Ở các procedures thì tính năng debug không có, viết ra anh em phải debug bằng mắt chứ PL/SQL không hỗ trợ.
5. Ví dụ
Giải thích rồi, kiến trúc rồi. Giờ tới lúc cho anh em ví dụ về PL/SQL nha. Vì PL/SQL ở trên đã nói với anh em là giống như ngôn ngữ lập trình nên có một vài cú pháp anh em bắt buộc phải theo nha
Ví dụ như := là gán, 1..10 là từ 1 tới 10. Kết thúc vòng lặp thì phải là END LOOP.
-- available online in file 'sample1' // Khai báo biến x bằng 100 DECLARE x NUMBER := 100; BEGIN // Lặp i từ 1 tới 10 FOR i IN 1..10 LOOP // Nếu i chia hết cho 2, i là số chẵn IF MOD(i,2) = 0 THEN -- i is even // Thêm vào bảng tạm 1 dòng với cột thứ 3 kiểu chuỗi nói rằng i là số chẵn INSERT INTO temp VALUES (i, x, 'i is even'); ELSE // Ngược lại thì cũng insert một dòng như i là số lẻ INSERT INTO temp VALUES (i, x, 'i is odd'); END IF; // Tăng giá trị x thêm 100 x := x + 100; END LOOP; // Chạy hết tất cả trong vòng for rồi insert một lượt vào DB, kiểu thực hiện toàn bộ câu iinssert một lần COMMIT; END;
6. Tham khảo
Cảm ơn anh em đã dành thời gian – Thank you for your time – Happy coding!
Tác giả: Kiên Nguyễn
Xem thêm:
- MySQL so găng MariaDB, điểm khác biệt chính, ưu và nhược điểm
- SQL Series: 5 mẹo dành cho SQL
- Cách sử dụng Transaction trong SQL hiệu quả
Xem thêm tuyển dụng các vị trí IT hấp dẫn trên TopDev