Lợi ích của các gói trên các thủ tục và chức năng độc lập là gì?


13

Tìm kiếm một câu trả lời chính tắc cho câu hỏi tại sao các gói nên được ưu tiên trong cơ sở dữ liệu Oracle hơn các thủ tục và hàm độc lập.

Câu trả lời:


12

Lợi ích của các gói

Phân nhóm logic - Các phương thức phối hợp với nhau có thể được đưa vào một đơn vị gắn kết thay vì chỉ được ghép nối logic nhưng tách biệt về mặt vật lý.

Phương thức riêng tư an toàn - Chức năng và thủ tục có thể được đặt ở chế độ riêng tư đối với gói và chỉ được sử dụng trong gói. Điều này làm cho bề mặt công cộng đơn giản và an toàn hơn.

Quản lý đặc quyền - Quyền có thể được cấp một lần cho một nhóm các thủ tục hoạt động cùng nhau thay vì riêng biệt cho từng thủ tục / chức năng được yêu cầu.

Gói an toàn - Gói được gói khó khăn hơn để mở gói hơn chức năng / quy trình được gói.

Đặt tên đơn giản - Một không gian tên lớn hơn cho phép các tên đơn giản hơn và có thể được sử dụng lại trong các gói khác.

Hiệu suất tốt hơn - Các gói có thể được biên dịch và được tải vào bộ nhớ hoàn toàn thay vì từng phần như các phương pháp khác. Lợi ích này nếu nó tồn tại ở mức tối thiểu so với các lợi ích khác.

Giảm hiệu lực - Thay đổi phần thân gói không làm mất hiệu lực các phụ thuộc như thay đổi chức năng hoặc thủ tục.

Các tính năng độc đáo - Biến gói, Hằng số gói, Khởi tạo, Trạng thái phiên, Nhận xét gói và Phương thức quá tải.

Tài liệu tham khảo:
11.2 Hướng dẫn về khái niệm
Hỏi Tom Câu hỏi
StackOverflow.com Câu hỏi về Hiệu suất gói
Unwrapping Trình bày PL / SQL (pdf)


2
Tôi phải không đồng ý với lợi ích hiệu suất. Nếu tải mã vào bộ nhớ là một sự kiện chờ đợi đáng chú ý, điều gì đó rất tồi tệ đã xảy ra. Và có khả năng lớn là thực tế là các gói sẽ làm giảm hiệu suất vì bạn phải đọc thêm mã khi bạn tải toàn bộ gói khi bạn chỉ thực sự cần một phương thức duy nhất. Tuy nhiên, trong cả hai trường hợp, sự khác biệt hiệu suất sẽ được đo lường.
Hang động Justin

@Justin - Điểm đó là từ Hướng dẫn về khái niệm 11.2. Đây là những gì nó nói: "Hiệu suất tốt hơn - Toàn bộ gói được tải vào bộ nhớ theo từng phần nhỏ khi một thủ tục trong gói được gọi lần đầu tiên. Tải này được hoàn thành trong một thao tác, trái với tải riêng biệt cần cho độc lập Khi các cuộc gọi đến các thủ tục đóng gói liên quan xảy ra, không cần I / O đĩa để chạy mã được biên dịch trong bộ nhớ. "
Leigh Riffel

4
Tôi đồng ý rằng các tài liệu tuyên bố có một lợi ích hiệu suất. Tài liệu không chính xác hoặc, ở mức tối thiểu, không đủ. Trường hợp tốt nhất, độ lớn của "lợi ích" là rất nhỏ. Và dấu hiệu của lợi ích là không rõ. Giống như quét bảng sẽ hiệu quả hơn nếu bạn đọc hầu hết các hàng và truy cập chỉ mục hiệu quả hơn nếu bạn đang đọc một hàng, đọc toàn bộ gói vào bộ nhớ trong một lần là có lợi nếu bạn sẽ sử dụng mọi phương thức và bất lợi nếu bạn thực sự chỉ muốn một phương thức.
Hang Justin

1
@Justin - Đánh giá của bạn nghe có vẻ hợp lý. Tôi đã không tìm thấy bất cứ điều gì dứt khoát bằng cách này hay cách khác, vì vậy tôi đã thêm một lời cảnh báo vào điểm trong câu trả lời. Cảm ơn vì đầu vào của bạn.
Leigh Riffel

Tôi nghĩ rằng lợi ích hiệu suất này là tương tự như bộ nhớ đệm. Nếu bạn chỉ sử dụng quy trình đó và bạn sử dụng nó ít thường xuyên hơn, bạn sẽ không đạt được bất kỳ lợi ích hiệu suất nào. Nhưng nếu bạn sử dụng nó thường xuyên và bất kỳ thủ tục nào khác được sử dụng trong gói này, bạn sẽ có được lợi ích. Tất cả các nhà phát triển xung quanh đang sử dụng bộ nhớ đệm, vì hiệu suất không thực sự nhưng hiệu suất cảm nhận được cải thiện. Vì các thủ tục liên quan được đặt vào cùng một gói, nên một số thủ tục khác cũng sẽ được gọi. Đây là tất cả về xác suất gọi hai thủ tục trong cùng một gói. Và bình thường, đọc với xác suất cao, nó xảy ra.
Atilla Ozgur
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.