Về cơ bản, họ làm cùng một việc, đó 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ợ. 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 SQL động nguyên bản (EXECUTE IMMEDIATE) chỉ được giới thiệu trong 8.
Có một vài điểm khác biệt. THỰC HIỆN NGAY LẬP TỨC chủ yếu là về việc thực thi SQL động (như bí danh NDS của nó chỉ ra). thực tế là chúng ta có thể sử dụng nó cho DDL là tùy từng thời điểm. Trong khi EXEC_DDL_STATEMENT () - như gợi ý - chỉ có thể thực thi DDL.
Nhưng phiên bản DBMS_UTILITY không được giữ lại chỉ để tương thích ngược, nó có một mẹo nhỏ mà chúng tôi không thể thực hiện với THỰC HIỆN NGAY LẬP TỨC - chạy DDL theo kiểu phân tán. Chúng tôi có thể chạy câu lệnh này từ cơ sở dữ liệu cục bộ của mình để tạo bảng trên cơ sở dữ liệu từ xa (cung cấp cho người dùng của chúng tôi các đặc quyền cần thiết ở đó):
SQL> exec [email protected]_db('create table t1 (id number)');
Tôi không khuyến nghị điều này, chỉ nói rằng nó có thể được thực hiện.