06/04/2021, 14:51

ìm hiểu Procedure trong Oracle - Oracle nâng cao

Trong bài này mình sẽ giới thiệu cú pháp và cách sử dụng procedure trong Oracle. Procedure là gì? Procedure hay còn gọi là thủ tục, nó dùng để gom một nhóm lệnh SQL cùng xử lý một mục đích cụ thẻ nào đó, sau đó đặt cho nó một cái tên và khai bao tham số truyền vào để sau này mỗi khi cần sử dụng ...

Trong bài này mình sẽ giới thiệu cú pháp và cách sử dụng procedure trong Oracle.

Procedure là gì? Procedure hay còn gọi là thủ tục, nó dùng để gom một nhóm lệnh SQL cùng xử lý một mục đích cụ thẻ nào đó, sau đó đặt cho nó một cái tên và khai bao tham số truyền vào để sau này mỗi khi cần sử dụng thì ta chỉ cần gọi tên và truyền tham số là được.

1. Cú pháp Procedure trong Oracle

Trước tiên mình gửi đến các bạn cú pháp để tạo procedure trong Oracle.

CREATE [OR REPLACE] PROCEDURE procedure_name  
    [ (parameter [,parameter]) ]  
IS  
    [declaration_section]  
BEGIN  
    executable_section  
[EXCEPTION  
    exception_section]  
END [procedure_name]; 

Trong đó bạn cần quan tâm đến một số lệnh sau:

  • procedure_name là tên của procedure. 
  • [OR REPLACE]: Khai báo tham số này thì nó sẽ xóa procedure có tên trùng với tên của procedure đang chạy
  • [ (parameter [,parameter]) ] là các tham số truyền vào procedure

Mỗi tham số truyền vào được xác định bởi ba loại như sau:

  • IN: Đây là kiểu mặc định, tham số này sẽ là dữ liệu đầu vào
  • OUT: Tham số này sẽ là dữ liệu đầu ra
  • IN OUT: Là tham số  đặc biệt, vừa là đầu vào vừa là đầu ra, và thường thì giá trị tại đầu ra sẽ bị thay đổi.

2. Ví dụ tạo Procedure trong Oracle

Giả sử mình sẽ tạo một bảng user gồm ID và NAME như sau:

create table user(id number(10) primary key,name varchar2(100));  

Bây giờ mình sẽ viết một thủ tục có nhiệm vụ là thêm mới một record vào bảng User.

Vì bảng user có hai column đó là idname, vì vậy thủ tục này sẽ có hai tham số.

Vì thủ tục này chỉ là thêm record nên không cần dữ liệu đầu ra, nên chỉ cần hai tham số trên là đủ.

create or replace procedure "INSERTUSER"    
    (id IN NUMBER,    
    name IN VARCHAR2)    
is    
begin    
     insert into user values(id,name);    
end;    

Khi bạn chạy lệnh này mà chương trình báo "Procedure created." thì tức là bạn đã tạo thành công.

3. Gọi chương trình Procedure trong Oracle

Tạo xong rồi, bây giờ muốn gọi nó để dùng thì làm cách nào? bạn hãy xem cách mà mình gọi thủ tục mà mình đã tạo ở trên như sau:

BEGIN    
   insertuser(101,'Rahul');  
   dbms_output.put_line('record inserted successfully');    
END; 

Dòng dbms_output.put_line('record inserted successfully'); chỉ là một lệnh hiển thị tin nhắn.

Chạy lệnh này là bạn đã thêm mới một record thành công.

Và đây là ví dụ với tham số OUT.

CREATE OR REPLACE PROCEDURE PROC1(invoicenr IN NUMBER, amnt OUT NUMBER)
AS BEGIN
SELECT AMOUNT INTO amnt FROM INVOICE WHERE INVOICE_NR = invoicenr;
END;

Và cách gọi nó như sau:

DECLARE
amount NUMBER;
BEGIN
PROC1(1000001, amount);
dbms_output.put_line(amount);
END;

4. Xóa Procedure trong Oracle

Nếu bạn muốn xóa một procedure nào đó thì hãy sử dụng lệnh DROP PROCEDURE, nó sẽ giúp giải phóng bộ nhớ cho database, giúp tiết kiệm tài nguyên.

Cú pháp
DROP PROCEDURE procedure_name;  

Ví dụ
DROP PROCEDURE pro1;  

5. Lời kết

Như vậy là mình đã giới thiệu xong cách sử dụng đơn giản của procedure trong Oracle, đây là chức năng khá hay nó giúp DBA cung cấp cho lập trình viên những đoạn code SQL ngắn gọn và xúc tích, thay vì nhận cả một đống câu truy vấn thì chỉ nhận một đoạn ngán mà thôi.

0