Sự khác biệt giữa các thủ tục, chức năng và quy trình được lưu trữ là gì?


75

Trong ngữ cảnh cơ sở dữ liệu MySQL, sự khác biệt giữa 3 thuật ngữ này là gì:

  • thủ tục lưu trữ
  • chức năng được lưu trữ
  • quy trình lưu trữ

Ngoài ra các chức năng tích hợp như các chức năng thời gian ngày tháng đó (ví dụ: WEEKDAY()vv) được coi là gì?


3
câu trả lời liên quan: MySQL stored procedure vs chức năng , tôi thấy các liên kết trong khi tôi đã cải thiện câu trả lời của tôi, do đó liên kết :)
Grijesh Chauhan

Cả hai thủ tục và hàm được lưu trữ đều là các đối tượng cơ sở dữ liệu chứa tập hợp các câu lệnh. Các thủ tục được lưu trữ được biên dịch trước, mặt khác các hàm được biên dịch mọi lúc khi được gọi. Hàm phải có giá trị trả về nhưng đối với các thủ tục thì nó là tùy chọn. Trong các thủ tục được lưu trữ, bạn có thể sử dụng INSERT, UPDATE, DELETE nhưng trong hàm bạn chỉ có thể sử dụng câu lệnh SELECT.
Miroslav Savel

Câu trả lời:


89

Google là bạn của bạn. Kết quả phù hợp đầu tiên cho "thủ tục hàm thông thường mysql" là: http://dev.mysql.com/doc/refman/5.0/en/stored-routines-syntax.html

Một bản tóm tắt nhanh:

Một thói quen được lưu trữ là một thủ tục hoặc một hàm.

Một thủ tục được gọi bằng câu lệnh CALL và chỉ có thể trả lại giá trị bằng cách sử dụng các biến đầu ra.

Một hàm có thể được gọi từ bên trong một câu lệnh giống như bất kỳ hàm nào khác và có thể trả về một giá trị vô hướng.


23
Trong khi tôi đồng ý với quan điểm của RTFM. Câu trả lời này hiện được google sử dụng để hiển thị kết quả nội tuyến.
Realistic

51

Ở đây tôi đã cố gắng tóm tắt sự khác biệt giữa các hàm và thủ tục:

  1. FUNCTION luôn trả về một giá trị bằng cách sử dụng câu lệnh return. PROCEDURE có thể trả về một hoặc nhiều giá trị thông qua các tham số hoặc có thể không trả về bất kỳ giá trị nào.
  2. Các hàm thường được sử dụng để tính toán trong đó các thủ tục thường được sử dụng để thực thi logic nghiệp vụ.
  3. Một Hàm chỉ trả về 1 giá trị. Thủ tục có thể trả về nhiều giá trị (tối đa 1024).
  4. Thủ tục đã lưu trữ luôn trả về một giá trị nguyên bằng 0 theo mặc định. Trong khi các kiểu trả về của hàm có thể là giá trị vô hướng hoặc bảng hoặc bảng.
  5. Các thủ tục được lưu trữ có một kế hoạch thực thi được biên dịch trước, trong đó các chức năng thì không.
  6. Một hàm có thể được gọi trực tiếp bằng câu lệnh SQL giống như SELECT func_name FROM DUALcác thủ tục while không thể.
  7. Thủ tục lưu trữ có tính bảo mật và giảm lưu lượng mạng và chúng ta cũng có thể gọi thủ tục lưu trữ trong bất kỳ số lượng ứng dụng nào tại một thời điểm.
  8. Một Hàm có thể được sử dụng trong các truy vấn SQL trong khi một thủ tục không thể được sử dụng trong các truy vấn SQL. Điều đó gây ra sự khác biệt lớn giữa chức năng và thủ tục.

30

Sự khác biệt giữa hàm MySQL và thủ tục mysql

Hàm MYSQL

Nó phải trả về giá trị. IN, OUTINOUTkhông thể được sử dụng trong function.But trở datatype phải khai báo khi tạo một hàm. hàm có thể được gọi từ một câu lệnh SQL. Hàm trả về một giá trị.

Thủ tục MYSQL

Giá trị trả về là không bắt buộc nhưng có thể được sử dụng tham số OUT để trả về thủ tục. Có thể sử dụng IN| OUT| INOUTthông số. Không thể gọi thủ tục từ Câu lệnh SQL. thủ tục trả về nhiều giá trị bằng cách sử dụng OUThoặc INOUTtham số.


5

THỦ TỤC VS CHỨC NĂNG

1.  PROCEDURES may or may not return a value but FUNCTION must return a value
2.  PROCEDURES can have input/output parameter but FUNCTION only has input parameter.
3.  We can call FUNCTION from PROCEDURES but cannot call PROCEDURES from a function. 
4.  We cannot use PROCEDURES in SQL statement like SELECT, INSERT, UPDATE, DELETE, MERGE etc. but we can use them with FUNCTION.
5.  We can use try-catch exception handling in PROCEDURES but we cannot do that in FUNCTION. 
6.  We can use transaction in PROCEDURES but it is not possible in FUNCTION.

2

Hàm phải trả về một giá trị nhưng trong Thủ tục lưu trữ thì nó là tùy chọn (Thủ tục có thể trả về giá trị 0 hoặc n). Các hàm có thể chỉ có các tham số đầu vào cho nó trong khi các Thủ tục có thể có các tham số đầu vào / đầu ra. Các hàm có thể được gọi từ Thủ tục trong khi các Thủ tục không thể được gọi từ Hàm.

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.