Quản trị hàm (functions) trong Oracle Database bao gồm việc tạo, sử dụng và quản lý các hàm PL/SQL. Hàm (function) trong Oracle là một khối mã PL/SQL có thể thực hiện các tính toán, thao tác dữ liệu và trả về một giá trị duy nhất. Các hàm giúp tái sử dụng mã, cải thiện hiệu suất và đảm bảo tính nhất quán trong các ứng dụng cơ sở dữ liệu.
Tạo Function
Hàm trong Oracle được tạo bằng lệnh CREATE FUNCTION. Một hàm bao gồm phần khai báo (declarations), phần thân (body) với các câu lệnh thực thi, và phần xử lý ngoại lệ (exception handling).
Cú pháp
CREATE [OR REPLACE] FUNCTION function_name (parameter_name [IN | OUT | IN OUT] datatype [, ...]) RETURN return_datatype IS | AS -- Khai báo biến (declarations) BEGIN -- Câu lệnh thực thi (execution statements) RETURN return_value; EXCEPTION -- Xử lý ngoại lệ (exception handling) END function_name;
Ví dụ
Dưới đây là ví dụ về việc tạo một hàm để tính toán tổng số lượng đơn hàng của một khách hàng dựa trên customer_id:
CREATE OR REPLACE FUNCTION get_total_orders (
p_customer_id IN orders.customer_id%TYPE
) RETURN NUMBER
IS
v_total_orders NUMBER := 0;
BEGIN
SELECT COUNT(*)
INTO v_total_orders
FROM orders
WHERE customer_id = p_customer_id;
RETURN v_total_orders;
EXCEPTION
WHEN NO_DATA_FOUND THEN
RETURN 0;
WHEN OTHERS THEN
RAISE_APPLICATION_ERROR(-20001, ‘Error calculating total orders: ‘ || SQLERRM);
END get_total_orders;
Gọi Function
Hàm có thể được gọi từ các câu lệnh SQL, PL/SQL hoặc từ các ứng dụng khách.
Gọi từ PL/SQL
DECLARE
v_total NUMBER;
BEGIN
v_total := get_total_orders(101);
DBMS_OUTPUT.PUT_LINE(‘Total orders: ‘ || v_total);
END;
Gọi từ SQL
SELECT get_total_orders(101) FROM dual;
Sửa đổi Function
Để sửa đổi một hàm, bạn có thể sử dụng lệnh CREATE OR REPLACE FUNCTION, cho phép bạn thay thế hàm hiện tại mà không cần phải xóa và tạo lại.
Ví dụ
CREATE OR REPLACE FUNCTION get_total_orders (
p_customer_id IN orders.customer_id%TYPE
) RETURN NUMBER
IS
v_total_orders NUMBER := 0;
BEGIN
SELECT COUNT(*)
INTO v_total_orders
FROM orders
WHERE customer_id = p_customer_id;
RETURN v_total_orders;
EXCEPTION
WHEN NO_DATA_FOUND THEN
RETURN 0;
WHEN OTHERS THEN
RAISE_APPLICATION_ERROR(-20001, ‘Error calculating total orders: ‘ || SQLERRM);
END get_total_orders;
Xóa Function
Để xóa một hàm, sử dụng lệnh DROP FUNCTION.
Ví dụ
DROP FUNCTION get_total_orders;
Quyền Truy Cập
Để tạo và sử dụng hàm, bạn cần các quyền thích hợp:
- CREATE FUNCTION: Quyền tạo hàm.
- EXECUTE: Quyền thực thi hàm.
Cấp quyền
GRANT CREATE FUNCTION TO user_name;
GRANT EXECUTE ON function_name TO user_name;
Kiểm tra và Debug Function
Oracle cung cấp các công cụ và lệnh để kiểm tra và debug hàm:
- DBMS_OUTPUT.PUT_LINE: In thông báo để kiểm tra.
- EXCEPTION: Xử lý và debug ngoại lệ.
Ví dụ sử dụng DBMS_OUTPUT.PUT_LINE
CREATE OR REPLACE FUNCTION get_total_orders (
p_customer_id IN orders.customer_id%TYPE
) RETURN NUMBER
IS
v_total_orders NUMBER := 0;
BEGIN
DBMS_OUTPUT.PUT_LINE(‘Calculating total orders for customer: ‘ || p_customer_id);
SELECT COUNT(*)
INTO v_total_orders
FROM orders
WHERE customer_id = p_customer_id;
DBMS_OUTPUT.PUT_LINE(‘Total orders: ‘ || v_total_orders);
RETURN v_total_orders;
EXCEPTION
WHEN NO_DATA_FOUND THEN
RETURN 0;
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(‘Error: ‘ || SQLERRM);
RAISE_APPLICATION_ERROR(-20001, ‘Error calculating total orders: ‘ || SQLERRM);
END get_total_orders;
Sử dụng Function trong Các Câu Lệnh SQL và PL/SQL
Hàm có thể được sử dụng trong các câu lệnh SELECT, WHERE, và các câu lệnh SQL khác, cũng như trong các khối PL/SQL và trigger.
Ví dụ sử dụng trong câu lệnh SQL
SELECT customer_id, get_total_orders(customer_id) AS total_orders
FROM customers;
Ví dụ sử dụng trong trigger
CREATE OR REPLACE TRIGGER update_order_count
AFTER INSERT OR DELETE ON orders
FOR EACH ROW
BEGIN
IF INSERTING THEN
UPDATE customers
SET order_count = get_total_orders(:NEW.customer_id)
WHERE customer_id = :NEW.customer_id;
ELSIF DELETING THEN
UPDATE customers
SET order_count = get_total_orders(:OLD.customer_id)
WHERE customer_id = :OLD.customer_id;
END IF;
END;
Function là một phần quan trọng trong Oracle Database, giúp tăng cường khả năng tái sử dụng mã, tối ưu hóa hiệu suất và đảm bảo tính nhất quán trong các ứng dụng cơ sở dữ liệu. Việc hiểu và sử dụng function đúng cách sẽ giúp bạn quản lý và phát triển hệ thống cơ sở dữ liệu hiệu quả hơn.
- Q136. Examine this configuration: PDB1 and PDB2 are pluggable databases in CDB1. You execute these commands successfully
- Rman Restore Tablespace trong khi mất datafile và không có datafile backup Oracle Database 19c
- Rman recovery point in time Oracle Database 19c
- Tìm hiểu hệ quản trị CSDL Cassandra
- Q128 Which three statements are true about time zones, date data types, and timestamp data types in an Oracle database?

Martfury - WooCommerce Marketplace WordPress Theme
TheGem - Creative Multi-Purpose & WooCommerce WordPress Theme
Savoy - Minimalist AJAX WooCommerce Theme
Consultix - Business Consulting WordPress Theme
Elessi - WooCommerce AJAX WordPress Theme - RTL support
Impreza - WordPress Website and WooCommerce Builder
Soledad - Multipurpose Newspaper Blog & WooCommerce WordPress Theme
Striking - MultiFlex & Ecommerce Responsive WP Theme
Shopkeeper - Multi-Purpose WooCommerce Theme
KALLYAS - Creative eCommerce Multi-Purpose WordPress Theme
All In One Addons for WPBakery
Rank Math SEO Pro
WPBakery Page Builder Clipboard
WoodMart - Multipurpose WooCommerce Theme
CSS3 Compare Pricing Tables
Booked
Interactive World Maps
Go Pricing