Gói DBMS_METADATA (giả sử bạn đang sử dụng phiên bản Oracle hợp lý gần đây) sẽ tạo DDL cho bất kỳ đối tượng nào trong cơ sở dữ liệu. Vì vậy,
SELECT dbms_metadata.get_ddl( 'TABLE', 'TABLEA', 'SCHEMAA' )
FROM dual;
sẽ trả về một CLOB với DDL cho SchemaA.TableA. Bạn có thể bắt gặp trường hợp ngoại lệ được đưa ra mà đối tượng không tồn tại, nhưng tôi có xu hướng khuyên bạn nên truy vấn từ điển dữ liệu (tức là DBA_OBJECTS) để xác minh rằng có một bảng có tên TableA trong SchemaA, tức là
SELECT COUNT(*)
FROM dba_objects
WHERE owner = 'SCHEMAA'
AND object_name = 'TABLEA'
AND object_type = 'TABLE'
Lưu ý rằng nếu bạn không có quyền truy cập vào DBA_OBJECTS, bạn có thể sử dụng ALL_OBJECTS để thay thế. Tuy nhiên, mối quan tâm ở đó là có thể có một TableA trong SchemaA mà bạn không có quyền truy cập SELECT. Bảng đó sẽ không xuất hiện trong ALL_OBJECTS (có tất cả các đối tượng mà bạn có quyền truy cập) nhưng sẽ xuất hiện trong DBA_OBJECTS (có tất cả các đối tượng trong cơ sở dữ liệu bất kể bạn có thể truy cập chúng hay không).
Sau đó, bạn có thể ghi DDL vào một tệp hoặc, nếu số lượng là 0, cho biết rằng đối tượng không tồn tại. Từ một thủ tục được lưu trữ, bạn có thể sử dụng gói UTL_FILE để ghi vào tệp trên máy chủ cơ sở dữ liệu. Nếu bạn đang cố gắng ghi vào một tệp trên hệ thống tệp máy khách, bạn sẽ cần sử dụng ngôn ngữ có quyền truy cập vào tài nguyên của hệ điều hành máy khách. Một chương trình C / Java / Perl / v.v. nhỏ sẽ có thể chọn một CLOB và ghi dữ liệu đó vào một tệp trên hệ điều hành khách.