Sự khác biệt giữa UDF và thủ tục được lưu trữ trong SQL Sự khác nhau giữa
so với thủ tục được lưu trữ trong SQL
Môi trường SQL đi kèm với các thành phần khác nhau làm việc với nó để phân phối thành công các tác vụ trong tay. Có người dùng được xác định chức năng và thủ tục lưu trữ, được phổ biến trong môi trường SQL. Đó là sự khác biệt giữa hai điều này được xem xét dưới đây.
Sự khác nhau
Sự khác biệt đầu tiên được nhìn thấy với chức năng người dùng được xác định là nó được lập trình theo cách nó phải trả về một giá trị. Thủ tục lưu trữ có một số phụ cấp về việc có hay không trả lại một giá trị. Điều này phụ thuộc vào việc có hay không các thủ tục lưu trữ có một giá trị để trở lại.
Sự khác biệt được thấy giữa hàm do người dùng xác định và thủ tục được lưu trữ liên quan đến các câu lệnh. Chức năng người dùng được xác định chỉ cho phép đọc các câu lệnh được chọn trong khi các câu lệnh DML không được phép. Mặt khác, thủ tục được lưu trữ cho phép sử dụng cả hai câu lệnh chọn, cũng như các câu lệnh DML, cũng có thể được cập nhật và thao tác.
Chức năng do người dùng định nghĩa sẽ chỉ cho phép nhập các tham số nhưng không hỗ trợ đầu ra của cùng một tham số. Thủ tục lưu trữ, ngược lại, hỗ trợ cả hai tham số đầu vào và đầu ra. UDF cũng không cho phép sử dụng khối catch thử. Thủ tục lưu trữ cho phép sử dụng khối catch thử để xử lý ngoại lệ.
UDF cũng không cho phép các giao dịch xảy ra trong các chức năng. Chức năng này có sẵn trong thủ tục được lưu trữ cho phép xử lý giao dịch. UDF cũng không cho phép sử dụng các biến bảng và nó cũng không cho phép các bảng tạm thời. Thủ tục lưu trữ, tuy nhiên, cho phép sử dụng các biến bảng cũng như một bảng tạm thời trong đó.
Khi ở trong một hàm, UDF không cho phép các bảng lưu trữ được gọi từ nó. Điều này là khá khác nhau khi nói đến thủ tục lưu trữ, cho phép các chức năng được gọi là không có bất kỳ hạn chế. Khi với chức năng, UDF không cho phép các chức năng nói trên được gọi từ một câu lệnh select. Thủ tục lưu giữ cũng cho biết các thủ tục không thể được gọi từ Where / Select và Having statements. Exec hoặc Execute có thể được sử dụng để gọi hoặc thậm chí thực hiện các thủ tục lưu trữ. Cuối cùng nhưng không kém phần quan trọng là UDF có thể được dùng để tạo mệnh đề join, khai thác tập kết quả. Trong thủ tục lưu trữ, điều này là không thể vì không có thủ tục được cho phép trong một điều khoản tham gia. Cũng cần lưu ý rằng thủ tục được lưu trữ cho phép quay trở lại với giá trị bằng không hoặc thậm chí n, trong khi UDF chỉ có thể trở lại một giá trị cụ thể và giá trị cài đặt sẵn được đặt trước.
Tóm tắt
Bắt buộc hàm trả về giá trị trong khi nó không phải là thủ tục lưu sẵn.
Chọn các câu lệnh chỉ được chấp nhận trong UDF trong khi các câu lệnh DML không bắt buộc.
Thủ tục lưu trữ chấp nhận bất kỳ câu lệnh nào cũng như các câu lệnh DML.
UDF chỉ cho phép đầu vào chứ không phải đầu ra.
Thủ tục lưu trữ cho phép cả đầu vào và đầu ra.
Các khối catch không thể được sử dụng trong UDF nhưng có thể được sử dụng trong thủ tục lưu trữ.
Không được phép giao dịch nào trong các hàm trong UDF nhưng trong thủ tục lưu trữ chúng được cho phép.
Chỉ có các biến bảng có thể được sử dụng trong UDF chứ không phải các bảng tạm thời.
Thủ tục lưu trữ cho phép cả hai biến bảng và các bảng tạm thời.
UDF không cho phép các thủ tục được lưu trữ được gọi từ các chức năng trong khi các thủ tục lưu trữ cho phép gọi hàm.
UDF được sử dụng trong mệnh đề join, trong khi thủ tục lưu trữ không thể được sử dụng trong mệnh đề join.
Thủ tục lưu trữ sẽ luôn luôn cho phép quay trở lại bằng không. Ngược lại, UDF có các giá trị phải trở lại một điểm đã xác định trước.