2011-08-07 11 views
20

Sự khác nhau giữa DBMS_UTILITY.EXEC_DDL_STATEMENTEXECUTE IMMEDIATE là gì?Oracle: DBMS_UTILITY.EXEC_DDL_STATEMENT vs EXECUTE IMMEDIATE

+11

Không chắc chắn lý do tại sao ai đó đã bỏ phiếu để đóng này là "tắt chủ đề". Đó là một câu hỏi về ngôn ngữ lập trình, chủ đề gì về điều đó? – APC

Trả lời

28

Về cơ bản, chúng thực hiện tương tự, đó là cung cấp một cơ chế để thực thi các câu lệnh DDL trong PL/SQL, vốn không được hỗ trợ nguyên bản. Nếu bộ nhớ phục vụ tốt cho tôi, EXEC_DDL_STATEMENT có sẵn trong phiên bản Oracle 7 của gói DBMS_UTILITY, trong khi Native Dynamic SQL (EXECUTE IMMEDIATE) chỉ được giới thiệu trong 8.

Có một vài điểm khác biệt. EXECUTE IMMEDIATE chủ yếu là về việc thực thi SQL động (như tên NDS của nó). thực tế là chúng ta có thể sử dụng nó cho DDL là by-the-by.

Nhưng phiên bản DBMS_UTILITY không được giữ lại chỉ cho khả năng tương thích ngược, nó có một thủ thuật gọn gàng mà chúng ta không thể thực hiện với EXECUTE IMMEDIATE - chạy DDL theo kiểu phân tán. Chúng tôi có thể chạy tuyên bố này từ cơ sở dữ liệu địa phương của chúng tôi để tạo ra một bảng trên một cơ sở dữ liệu từ xa (cung cấp người dùng của chúng tôi có đặc quyền cần thiết có):

SQL> exec [email protected]_db('create table t1 (id number)'); 

Tôi không đề nghị này, chỉ cần nói nó có thể được thực hiện.