Thứ Năm, 29 tháng 6, 2023

PL/SQL là gì? Hiểu sâu về PL/SQL

Mục lục nội dung
1. PL/SQL là gì?
2. Đôi điều lưu ý về PL/SQL
2.1 Embedded language – Ngôn ngữ nhúng
2.2 Hiệu suất cao
3. Kiến trúc PL/SQL
4. Ưu nhược điểm của PL/SQL
4.1 Ưu điểm
4.2 Nhược điểm
5. Ví dụ
6. Tham khảo

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.

PL/SQL là gì?
Ơ kìa, exception chỗ nào cũng cần được xử lý chứ

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.

PL/SQL

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.

PL/SQL
Procedure của PL/SQL sử dụng keywords như các ngôn ngữ tự nhiên, sao lại không giống code =)))

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.

PL/SQL

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.

PL/SQL
The FORALL statement issues a series of INSERTUPDATE, or DELETE statements, usually much faster than an equivalent FOR 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?

PL/SQL
Kiến trúc PLSQL

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

  • PL/SQL Architecture
  • SQL trigger là gì? – Ưu, nhược điểm

Hy vọng hữu ích với anh/em.

=============================
* KHOÁ HỌC ORACLE DATABASE A-Z ENTERPRISE trực tiếp từ tôi giúp bạn bước đầu trở thành những chuyên gia DBA, đủ kinh nghiệm đi thi chứng chỉ OA/OCP, đặc biệt là rất nhiều kinh nghiệm, bí kíp thực chiến trên các hệ thống Core tại VN chỉ sau 1 khoá học.
* CÁCH ĐĂNG KÝ: Gõ (.) hoặc để lại số điện thoại hoặc inbox https://m.me/tranvanbinh.vn hoặc Hotline/Zalo 090.29.12.888
* Chi tiết tham khảo:
https://bit.ly/oaz_w
=============================
KẾT NỐI VỚI CHUYÊN GIA TRẦN VĂN BÌNH:
📧 Mail: binhoracle@gmail.com
☎️ Mobile/Zalo: 0902912888
👨 Facebook: https://www.facebook.com/BinhOracleMaster
👨 Inbox Messenger: https://m.me/101036604657441 (profile)
👨 Fanpage: https://www.facebook.com/tranvanbinh.vn
👨 Inbox Fanpage: https://m.me/tranvanbinh.vn
👨👩 Group FB: https://www.facebook.com/groups/DBAVietNam
👨 Website: https://www.tranvanbinh.vn
👨 Blogger: https://tranvanbinhmaster.blogspot.com
🎬 Youtube: https://www.youtube.com/@binhguru
👨 Tiktok: https://www.tiktok.com/@binhguru
👨 Linkin: https://www.linkedin.com/in/binhoracle
👨 Twitter: https://twitter.com/binhguru
👨 Podcast: https://www.podbean.com/pu/pbblog-eskre-5f82d6
👨 Địa chỉ: Tòa nhà Sun Square - 21 Lê Đức Thọ - Phường Mỹ Đình 1 - Quận Nam Từ Liêm - TP.Hà Nội

=============================
PL/SQL là gì? Hiểu sâu về PL/SQL, oracle tutorial, học oracle database, Tự học Oracle, Tài liệu Oracle 12c tiếng Việt, Hướng dẫn sử dụng Oracle Database, Oracle SQL cơ bản, Oracle SQL là gì, Khóa học Oracle Hà Nội, Học chứng chỉ Oracle ở đầu, Khóa học Oracle online,sql tutorial, khóa học pl/sql tutorial, học dba, học dba ở việt nam, khóa học dba, khóa học dba sql, tài liệu học dba oracle, Khóa học Oracle online, học oracle sql, học oracle ở đâu tphcm, học oracle bắt đầu từ đâu, học oracle ở hà nội, oracle database tutorial, oracle database 12c, oracle database là gì, oracle database 11g, oracle download, oracle database 19c, oracle dba tutorial, oracle tunning, sql tunning , oracle 12c, oracle multitenant, Container Databases (CDB), Pluggable Databases (PDB), oracle cloud, oracle security, oracle fga, audit_trail,oracle RAC, ASM, oracle dataguard, oracle goldengate, mview, oracle exadata, oracle oca, oracle ocp, oracle ocm , oracle weblogic, postgresql tutorial, mysql tutorial, mariadb tutorial, sql server tutorial, nosql, mongodb tutorial, oci, cloud, middleware tutorial, hoc solaris tutorial, hoc linux tutorial, hoc aix tutorial, unix tutorial, securecrt, xshell, mobaxterm, putty

ĐỌC NHIỀU

Trần Văn Bình - Oracle Database Master