PL / SQL - Thủ tục

Trong chương này, chúng ta sẽ thảo luận về Thủ tục trong PL / SQL. Asubprogramlà một đơn vị / mô-đun chương trình thực hiện một tác 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àcalling program.

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

  • Ở cấp giản đồ
  • 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à standalone subprogram. 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à packaged subprogram. 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 - Packages'.

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:

  • Functions- 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ị.

  • Procedures- Các chương trình con này không trả về một giá trị trực tiếp; 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 PL/SQL procedure. Chúng ta sẽ thảo luậnPL/SQL function 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:

S.Không Bộ phận & Mô tả
1

Declarative Part

Nó là một phần không bắt buộc. Tuy nhiên, phần khai báo cho một 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

Executable Part

Đâ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

Exception-handling

Đâ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 với CREATE OR REPLACE PROCEDUREtuyên bố. 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 EXECUTE từ khóa

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

Thủ tục trên có tên 'greetings' 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 quy trình độc lập bị xóa với DROP PROCEDUREtuyên bố. 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:

S.Không Chế độ & Mô tả Thông số
1

IN

Tham số IN cho phép bạn truyền một giá trị vào chương trình con. It is a read-only parameter. 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ố, ký tự, 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.It is the default mode of parameter passing. Parameters are passed by reference.

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ó.The actual parameter must be variable and it is passed by value.

3

IN OUT

An IN OUTtham số truyề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 trình 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ị.Actual parameter is passed by value.

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 đầ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ì thế,a được thay thế cho x, b được thay thế cho y, c được thay thế cho zd được thay thế cho m.

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

Trong ký hiệu được đặt tên, tham số thực tế được liên kết với tham số chính thức bằng cách sử dụng arrow symbol ( => ). 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ể trộn cả hai ký hiệu trong lệnh 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 đây 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);