Thứ Tư, 26 tháng 10, 2022

PL / SQL - Thủ tục (procedure)

Trong chương này, chúng ta sẽ thảo luận về các Thủ tục trong PL/SQL. Chương trình con là một đơn vị / mô-đun chương trình thực hiện một nhiệm vụ cụ thể. Các chương trình con này được kết hợp với nhau để tạo thành các chương trình lớn hơn. Về cơ bản, đây được gọi là 'Thiết kế mô-đun'. Một chương trình con có thể được gọi bởi một chương trình con hoặc chương trình khác được gọi là chương trình gọi.


Một chương trình con có thể được tạo -

  • Ở cấp schema

  • Bên trong một gói

  • Bên trong một khối PL/SQL

Ở cấp độ lược đồ, chương trình con là một chương trình con độc lập . Nó được tạo bằng câu lệnh CREATE PROCEDURE hoặc câu lệnh CREATE FUNCTION. Nó được lưu trữ trong cơ sở dữ liệu và có thể bị xóa bằng câu lệnh DROP PROCEDURE hoặc DROP FUNCTION.

Một chương trình con được tạo bên trong một gói là một chương trình con được đóng gói . Nó được lưu trữ trong cơ sở dữ liệu và chỉ có thể bị xóa khi gói bị xóa bằng câu lệnh DROP PACKAGE. Chúng ta sẽ thảo luận về các gói trong chương 'PL/SQL - Gói' .

Chương trình con PL/SQL được đặt tên là các khối PL/SQL có thể được gọi với một tập các tham số. PL/SQL cung cấp hai loại chương trình con:

  • Hàm (function) - Các chương trình con này trả về một giá trị duy nhất; chủ yếu được sử dụng để tính toán và trả về một giá trị.

  • Thủ tục (procedure) - Các chương trình con này không trực tiếp trả về một giá trị; chủ yếu được sử dụng để thực hiện một hành động.

Chương này sẽ trình bày các khía cạnh quan trọng của một thủ tục PL/SQL . Chúng ta sẽ thảo luận về hàm PL/SQL trong chương tiếp theo.

Các phần của chương trình con PL/SQL

Mỗi chương trình con PL/SQL có một tên và cũng có thể có một danh sách tham số. Giống như các khối PL/SQL ẩn danh, các khối được đặt tên cũng sẽ có ba phần sau:

STT

Bộ phận & Mô tả

1

Phần khai báo

Nó là một phần tùy chọn. Tuy nhiên, phần khai báo cho chương trình con không bắt đầu bằng từ khóa DECLARE. Nó chứa các khai báo về kiểu, con trỏ, hằng, biến, ngoại lệ và chương trình con lồng nhau. Các mục này là cục bộ của chương trình con và không còn tồn tại khi chương trình con hoàn thành việc thực thi.

2

Phần thực thi

Đây là một phần bắt buộc và chứa các câu lệnh thực hiện hành động được chỉ định.

3

Xử lý ngoại lệ

Đây lại là một phần không bắt buộc. Nó chứa mã xử lý lỗi thời gian chạy.

Tạo một thủ tục

Một thủ tục được tạo bằng câu lệnh CREATE OR REPLACE PROCEDURE . Cú pháp đơn giản cho câu lệnh CREATE OR REPLACE PROCEDURE như sau:

CREATE [OR REPLACE] PROCEDURE procedure_name 

[(parameter_name [IN | OUT | IN OUT] type [, ...])] 

{IS | AS} 

BEGIN 

  < procedure_body > 

END procedure_name;

Ở đâu,

  • procedure-name chỉ định tên của thủ tục.

  • Tùy chọn [HOẶC THAY THẾ] cho phép sửa đổi quy trình hiện có.

  • Danh sách tham số tùy chọn chứa tên, chế độ và các loại tham số. IN đại diện cho giá trị sẽ được truyền từ bên ngoài và OUT đại diện cho tham số sẽ được sử dụng để trả về một giá trị bên ngoài thủ tục.

  • thân thủ tục chứa phần thực thi.

  • Từ khóa AS được sử dụng thay cho từ khóa IS để tạo một quy trình độc lập.

Thí dụ

Ví dụ sau tạo một thủ tục đơn giản hiển thị chuỗi 'Hello World!' trên màn hình khi thực thi.

CREATE OR REPLACE PROCEDURE greetings 

AS 

BEGIN 

   dbms_output.put_line('Hello World!'); 

END; 

/

Khi đoạn mã trên được thực thi bằng lời nhắc SQL, nó sẽ tạo ra kết quả sau:

Procedure created.


Thực hiện một quy trình độc lập

Một thủ tục độc lập có thể được gọi theo hai cách:

  • Sử dụng từ khóa EXECUTE

  • Gọi tên của thủ tục từ một khối PL/SQL

Thủ tục có tên 'lời chào' ở trên có thể được gọi với từ khóa EXECUTE là -

EXECUTE greetings;


Cuộc gọi trên sẽ hiển thị -

Hello World


PL/SQL procedure successfully completed.


Thủ tục cũng có thể được gọi từ một khối PL/SQL khác -

BEGIN 

   greetings; 

END; 

/

Cuộc gọi trên sẽ hiển thị -

Hello World  


PL/SQL procedure successfully completed. 


Xóa một thủ tục độc lập

Một thủ tục độc lập bị xóa với câu lệnh DROP PROCEDURE . Cú pháp để xóa một thủ tục là:

DROP PROCEDURE procedure-name; 


Bạn có thể bỏ quy trình chào hỏi bằng cách sử dụng câu lệnh sau:

DROP PROCEDURE greetings; 


Chế độ tham số trong chương trình con PL/SQL

Bảng sau liệt kê các chế độ tham số trong chương trình con PL/SQL:

STT

Thông số: Chế độ & Mô tả

1

IN

Tham số IN cho phép bạn truyền một giá trị vào chương trình con. Nó là một tham số chỉ đọc . Bên trong chương trình con, một tham số IN hoạt động giống như một hằng số. Nó không thể được chỉ định một giá trị. Bạn có thể chuyển một hằng số, nghĩa đen, biến khởi tạo hoặc biểu thức dưới dạng tham số IN. Bạn cũng có thể khởi tạo nó thành một giá trị mặc định; tuy nhiên, trong trường hợp đó, nó bị bỏ qua khỏi cuộc gọi chương trình con. Đây là chế độ truyền tham số mặc định. Các thông số được chuyển qua tham chiếu .

2

OUT

Tham số OUT trả về một giá trị cho chương trình đang gọi. Bên trong chương trình con, một tham số OUT hoạt động giống như một biến. Bạn có thể thay đổi giá trị của nó và tham chiếu giá trị sau khi gán nó. Tham số thực tế phải là biến và nó được truyền theo giá trị .

3

IN OUT

Tham số IN OUT chuyển một giá trị ban đầu cho một chương trình con và trả về một giá trị cập nhật cho người gọi. Nó có thể được gán một giá trị và giá trị đó có thể được đọc.

Tham số thực tế tương ứng với tham số chính thức IN OUT phải là một biến, không phải là một hằng số hoặc một biểu thức. Tham số chính thức phải được gán một giá trị. Tham số thực tế được truyền bằng giá trị.

Chế độ IN & OUT Ví dụ 1

Chương trình này tìm giá trị nhỏ nhất của hai giá trị. Ở đây, thủ tục nhận hai số bằng chế độ IN và trả về giá trị tối thiểu của chúng bằng cách sử dụng các tham số OUT.

DECLARE 

   a number; 

   b number; 

   c number;

PROCEDURE findMin(x IN number, y IN number, z OUT number) IS 

BEGIN 

   IF x < y THEN 

      z:= x; 

   ELSE 

      z:= y; 

   END IF; 

END;   

BEGIN 

   a:= 23; 

   b:= 45; 

   findMin(a, b, c); 

   dbms_output.put_line(' Minimum of (23, 45) : ' || c); 

END; 

/

Khi đoạn mã trên được thực thi tại dấu nhắc SQL, nó tạo ra kết quả sau:

Minimum of (23, 45) : 23  


PL/SQL procedure successfully completed. 


Chế độ IN & OUT Ví dụ 2

Thủ tục này tính bình phương giá trị của một giá trị được truyền vào. Ví dụ này cho thấy cách chúng ta có thể sử dụng cùng một tham số để chấp nhận một giá trị và sau đó trả về một kết quả khác.

DECLARE 

   a number; 

PROCEDURE squareNum(x IN OUT number) IS 

BEGIN 

  x := x * x; 

END;  

BEGIN 

   a:= 23; 

   squareNum(a); 

   dbms_output.put_line(' Square of (23): ' || a); 

END; 

/

Khi đoạn mã trên được thực thi tại dấu nhắc SQL, nó tạo ra kết quả sau:

Square of (23): 529 


PL/SQL procedure successfully completed.


Phương pháp truyền tham số

Các tham số thực tế có thể được chuyển theo ba cách:

  • Ký hiệu vị trí

  • Ký hiệu được đặt tên

  • Ký hiệu hỗn hợp

Ký hiệu vị trí

Trong ký hiệu vị trí, bạn có thể gọi thủ tục là -

findMin(a, b, c, d);


Trong ký hiệu vị trí, tham số thực tế đầu tiên được thay thế cho tham số hình thức đầu tiên; tham số thực tế thứ hai được thay thế cho tham số chính thức thứ hai, v.v. Vì vậy, a được thay thế cho x, b được thay thế cho y, c được thay thế cho z và d được thay thế cho m .

Ký hiệu được đặt tên

Trong ký hiệu được đặt tên, tham số thực được liên kết với tham số chính thức bằng ký hiệu mũi tên (=>) . Lệnh gọi thủ tục sẽ giống như sau:

findMin(x => a, y => b, z => c, m => d);


Ký hiệu hỗn hợp

Trong ký hiệu hỗn hợp, bạn có thể kết hợp cả hai ký hiệu trong cuộc gọi thủ tục; tuy nhiên, ký hiệu vị trí phải đứng trước ký hiệu được đặt tên.

Cuộc gọi sau là hợp pháp -

findMin(a, b, c, m => d);


Tuy nhiên, điều này không hợp pháp:

findMin(x => a, b, c, d);


=============================
* 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: 0902912888
⚡️ Skype: tranbinh48ca
👨 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: http://bit.ly/ytb_binhoraclemaster
👨 Tiktok: https://www.tiktok.com/@binhoraclemaster?lang=vi
👨 Linkin: https://www.linkedin.com/in/binhoracle
👨 Twitter: https://twitter.com/binhoracle
👨 Đị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, 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,khóa học pl/sql, 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 dataguard, oracle goldengate, mview, oracle exadata, oracle oca, oracle ocp, oracle ocm , oracle weblogic, middleware, hoc solaris, hoc linux, hoc aix, unix, securecrt, xshell, mobaxterm, putty

ĐỌC NHIỀU

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