ìm hiểu Function trong Oracle - Oracle nâng cao
Bài này chúng ta sẽ nói về Function trong Oracle, nó có chức năng tương tự như procedure, tuy nhiên vẫn có điểm khác biệt và chi tiết như thế nào thì hãy đọc bài này nhé. 1. Function trong Oracle Trong Oracle, một function là một hàm dùng để xử lý một chức năng nào đó và nó sẽ trả về một giá ...
Bài này chúng ta sẽ nói về Function trong Oracle, nó có chức năng tương tự như procedure, tuy nhiên vẫn có điểm khác biệt và chi tiết như thế nào thì hãy đọc bài này nhé.
1. Function trong Oracle
Trong Oracle, một function là một hàm dùng để xử lý một chức năng nào đó và nó sẽ trả về một giá trị duy nhất. Tương tự như các phần khác, bạn phải định nghĩa và khởi tạo function trước khi sử dụng được nó.
Có một số function có sẵn như hàm MIN, MAX, COUNT, ... đó là những function mà Oracle đã cung cấp sẵn cho chúng ta.
CREATE [OR REPLACE] FUNCTION function_name [ (parameter [,parameter]) ] RETURN return_datatype IS | AS [declaration_section] BEGIN executable_section [EXCEPTION exception_section] END [function_name]; <br><br><br><br><br><br><br><br><br>
Tương tự như procedure, bạn cần chú ý đến một số đặc điểm sau:
- [OR REPLACE] Nếu được khai báo thì nó sẽ xóa function cũ nếu trùng tên với function mới
- [ (parameter [,parameter]) là các tham số
- RETURN return_datatype là kiểu dữ liệu sẽ trả về của function
- [declaration_section] là các biến định nghĩa dùng trong hàm
Với tham số truyền vào sẽ có 3 loại:
- IN là tham số chỉ đầu vào
- OUT là tham số đầu ra
- IN OUT là tham số vừa đầu vào, vừa đầu ra
2. Ví dụ Function trong Oracle
Bây giơ mình sẽ viết hàm tính tổng của hai số.
CREATE OR REPLACE FUNCTION adder(n1 IN number, n2 IN number) RETURN number IS n3 number(8); BEGIN n3 :=n1+n2; RETURN n3; END;
Bạn xem hình mà mình có giải thích ở đây.
3. Gọi function trong Oracle
Sau đây là cách gọi một function mà mình đã tạo ở trên.
DECLARE n3 number(2); BEGIN n3 := adder(11,22); dbms_output.put_line('Addition is: ' || n3); END;
Chạy thì kết quả sẽ như sau:
Addition is: 33 Statement processed. 0.05 seconds
4. Một ví dụ khác về function trong Oracle
Đây là là hàm tìm số lớn nhất trong hai số.
FUNCTION findMax(x IN number, y IN number) RETURN number IS z number; BEGIN IF x > y THEN z:= x; ELSE Z:= y; END IF; RETURN z; END;
Cách dùng:
DECLARE a number; b number; c number; BEGIN a:= 23; b:= 45; c := findMax(a, b); dbms_output.put_line(' Maximum of (23,45): ' || c); END;
Hàm này sẽ trả về số lớn nhất trong hai tham số mà ta truyền vào, như vậy kết quả sẽ trả về là 45.
5. Một ví dụ về xử lý với table
Giả sử mình có bảng customer như sau:
Mình sẽ viết một hàm đếm tổng số khách hàng có trong bảng này như sau:
CREATE OR REPLACE FUNCTION totalCustomers RETURN number IS total number(2) := 0; BEGIN SELECT count(*) into total FROM customers; RETURN total; END;
Và đây là chương trình mình gọi hàm này.
DECLARE c number(2); BEGIN c := totalCustomers(); dbms_output.put_line('Total no. of Customers: ' || c); END;
Kết quả sẽ trả về là:
Total no. of Customers: 4 PL/SQL procedure successfully completed.
6. Function đệ quy trong Oracle
Khá thú vị phải không nào? Với các ngôn ngữ lập trình như C,C++ thì thuật toán đệ quy quá quen thuộc rồi, nhưng trong Oracle thì bạn cũng có thể làm được điều đó.
Mình sẽ viết một hàm tính giai thừa. Muốn tính giai thưa thì ta sẽ phải sử dụng vòng lặp, hoặc đệ quy cũng được. Và trong ví dụ này mình sẽ sử dụng đệ quy nhé.
FUNCTION fact(x number) RETURN number IS f number; BEGIN IF x=0 THEN f := 1; ELSE f := x * fact(x-1); END IF; RETURN f; END;
Cách gọi đến hàm đệ quy này khá đơn giản.
DECLARE num number; factorial number; BEGIN num:= 6; factorial := fact(num); dbms_output.put_line(' Factorial '|| num || ' is ' || factorial); END;
7. Lệnh xóa function trong Oracle
Nếu bạn muốn xóa một function nào đó thì hãy sử dụng lệnh DROP FUNCTION nhé.
DROP FUNCTION function_name;
DROP FUNCTION fact;
8. Lời kết
Như vậy là mình đã giới thiệu xong một vài cách sử dụng function trong Oracle, những kiến thức thế này rất bổ ích phải không các bạn, khá thú vị và hấp đẫn.
Mình cũng có đưa ra một vài ví dụ về cách tạo Function, cách gọi Function và xóa Function. Hy vọng nó sẽ hữu ích với bạn.