2011-09-01 75 views
14

Tôi đã cố gắng xem xét sự khác biệt giữa thủ tục và chức năng pl/sql và tìm thấy liên kết http://it.toolbox.com/blogs/oracle-guide/learn-plsql-procedures-and-functions-13030. Trước tiên, hãy để tôi cho bạn biết nhà phát triển thường làm gì với quy trình và chức năng pl/sqlThủ tục PL/Sql vs chức năng?

1) Muốn nhận được giá trị trả về. Anh ta có thể tạo nó với cả hàm và thủ tục. Với hàm nếu anh ta muốn trả về một giá trị duy nhất anh ta có thể sử dụng câu lệnh return. Nếu anh ta muốn trả lại nhiều giá trị, anh ta có thể đạt được nó với tham số inout. Thật thú vị, anh ta có thể nhận được giá trị trả về với tham số inout từ thủ tục (không có trả về)

Nhưng nó không tạo sự khác biệt cho nhà phát triển miễn là có thể đạt được ý định của nó hoặc với câu lệnh trả về hoặc tham số inout.

vì vậy ở đây cả hai đều có thể thay thế lẫn nhau.

2) Anh ấy có thể sử dụng DML trong cả chức năng và thủ tục. Vì vậy, ở đây anh ta cũng có thể sử dụng một trong hai thứ này để thay đổi trạng thái của databse.

Vì vậy, tôi không nhận được bất kỳ lý do cụ thể nào để sử dụng khi cả hai có thể thay thế lẫn nhau trong một số.

Lý do hợp lý duy nhất tôi tìm thấy lên đến một mức độ nào là chức năng có thể được gọi từ SQL, thủ tục có thể không

ai đó có thể giải thích cái nào để sử dụng khi nào và tại sao?

+0

Xem thêm [Chức năng vs Quy trình được lưu trữ] (https://forums.oracle.com/forums/thread.jspa?messageID=547397) trên Oracle.com – Vache

+0

@Mohit - Tôi tin rằng một câu hỏi tương tự đã được hỏi trước đây . Có thể Dup http://stackoverflow.com/questions/1179758/function-vs-stored-procedure-in-sql-server –

+0

@Vache tôi tìm thấy câu lệnh này Có thêm một sự khác biệt giữa thủ tục được lưu trữ và các hàm chỉ lưu các thủ tục được biên dịch một lần và có thể được gọi một lần nữa và một lần nữa mà không được biên dịch mỗi lần, điều này cải thiện hiệu suất và tiết kiệm thời gian, các chức năng khác biên dịch mỗi khi chúng được gọi tại https://forums.oracle.com/forums/thread.jspa?messageID = 547397 không chắc nó có thực sự đúng không? –

Trả lời

8

Bạn đã tìm thấy sự khác biệt chính. Bạn tạo một hàm nếu bạn muốn sử dụng nó trong SQL. Bạn tạo một thủ tục, khi bạn muốn sử dụng nó chỉ trong PL/SQL.

+0

Vì vậy, tôi có thể giả sử tôi nên luôn luôn sử dụng thủ tục cho đến khi và trừ khi tôi muốn sử dụng chúng trong truy vấn sql –

+7

Tôi nghĩ rằng đó là một nguyên tắc tốt của ngón tay cái. Tôi sẽ cụm từ nó một chút khác nhau: Nếu bạn cần phải chuyển đổi không hoặc nhiều giá trị đầu vào cho một giá trị đầu ra, hãy sử dụng một hàm. Nếu bạn muốn thao tác dữ liệu trong cơ sở dữ liệu, hãy sử dụng một proc được lưu trữ. –

+0

Tôi cũng sẽ sử dụng một hàm nếu tôi chỉ muốn sử dụng PL/SQL. Bằng cách này, nếu tôi cần sử dụng lại logic trong SQL bất kỳ lúc nào trong tương lai thì nó hoàn toàn tầm thường. Quy trình sử dụng chỉ có một lợi thế: nó cho phép bạn trả lại nhiều tham số. – borjab

3

Tôi làm gì. Sử dụng các chức năng nếu không có tác dụng phụ, thủ tục khác.

Hơn nữa, chỉ các hàm có thể là "thuần túy" (phù hợp với chỉ mục chức năng) và "pipelined".

1

Có chính hai khác nhau:

1:Use Procedure to take some action. But use function to return some value. 
2:You can call function from sql query but Procedure can't. 
3:Best practice to use Procedure then function if possible. 

Cảm ơn.

1

Một thủ tục và hàm có cấu trúc tương tự, ngoại trừ:

Một tiêu đề chức năng phải bao gồm một điều khoản RETURN chỉ định kiểu dữ liệu của giá trị trả về. Một nhóm thủ tục không thể có mệnh đề RETURN.

Hàm phải có ít nhất một câu lệnh RETURN trong phần thực thi của nó. Trong một thủ tục, câu lệnh RETURN là tùy chọn. Để biết chi tiết, xem RETURN Statement.

Để biết thêm thông tin tham khảo: http://docs.oracle.com/cd/B28359_01/appdev.111/b28370/subprograms.htm#CHDDCFHD

+0

Vâng, tôi nghĩ đây là câu trả lời hay nhất. Bạn cũng nên nghĩ đến các hàm sử dụng khi không muốn sử dụng các tham số của chế độ OUT và OUT OUT. Nếu có bất kỳ lý do gì để sử dụng các tham số này, bạn nên suy nghĩ nghiêm túc sử dụng một thủ tục lưu sẵn. – Rattlesnake

0

http://docs.oracle.com/cd/B28359_01/appdev.111/b28370/subprograms.htm#i4079

Tổng quan về PL/SQL subprograms Một PL/SQL Tiểu chương là một khối PL/SQL có tên có thể được gọi với một tập hợp các thông số. Chương trình con có thể là thủ tục hoặc hàm. Thông thường, bạn sử dụng một thủ tục để thực hiện một hành động và một hàm để tính toán và trả về một giá trị.

Các vấn đề liên quan