Package — tổ chức stored procedures
Trong hệ thống Oracle thật, procedure thường sống trong package thay vì đứng rời rạc; package tạo namespace và contract ổn định cho ứng dụng.
Package specification
Spec công bố procedure, function, type và constant mà caller được dùng. Nó giống interface/public header.
Package body
Body chứa implementation của public subprogram và có thể thêm private helper không xuất hiện trong spec.
Caller gọi bằng namespace: hr_salary_api.raise_department_salary(...).
Lợi ích
- Gom API cùng domain vào một namespace.
- Ẩn implementation và helper riêng tư.
- Hỗ trợ overload nhiều procedure cùng tên nhưng signature khác.
- Oracle có thể nạp package vào memory theo session để giảm chi phí parse.
Dependency
Đổi package body thường ít ảnh hưởng caller hơn đổi specification. Thay public signature trong spec có thể invalidate dependent objects.
Quyền
GRANT EXECUTE ON hr_salary_api TO app_user; cấp quyền cho toàn bộ public API của package.
Package state là theo session và có thể gây hành vi khó đoán với connection pool. Tránh lưu business state dài hạn trong package globals.
Thuật ngữ (di chuột để xem giải thích)
Đang tải dữ liệu mẫu…
Package specification
Spec công bố procedure, function, type và constant mà caller được dùng. Nó giống interface/public header.
Package body
Body chứa implementation của public subprogram và có thể thêm private helper không xuất hiện trong spec.
Caller gọi bằng namespace: hr_salary_api.raise_department_salary(...).
Lợi ích
- Gom API cùng domain vào một namespace.
- Ẩn implementation và helper riêng tư.
- Hỗ trợ overload nhiều procedure cùng tên nhưng signature khác.
- Oracle có thể nạp package vào memory theo session để giảm chi phí parse.
Dependency
Đổi package body thường ít ảnh hưởng caller hơn đổi specification. Thay public signature trong spec có thể invalidate dependent objects.
Quyền
GRANT EXECUTE ON hr_salary_api TO app_user; cấp quyền cho toàn bộ public API của package.
Package state là theo session và có thể gây hành vi khó đoán với connection pool. Tránh lưu business state dài hạn trong package globals.
Thuật ngữ (di chuột để xem giải thích)
Đang tải dữ liệu mẫu…
Oracle PL/SQL. Browser không có Oracle Server; editor dùng dialect PL/SQL và nút bên dưới chạy mô phỏng trên dữ liệu mẫu.
Đang tải trình soạn thảo…
Tạo package spec user_api công bố procedure get_user_city(p_user_id IN NUMBER, p_city OUT VARCHAR2).
Đang tải trình soạn thảo…
Viết package body user_api cài đặt get_user_city bằng SELECT city INTO p_city FROM users WHERE id = p_user_id.
Đang tải trình soạn thảo…
- Chạy thử truy vấn mẫu
- Hoàn thành bài tập (0/2)