不使用 dbms_metadata 从 oracle 数据库对象获取 DDL 命令

Get DDL command from oracle database objects without using dbms_metadata

我正在 oracle 数据库 中执行一个程序,它具有执行一种数据库对象清单的功能.

基本上我必须得到table类型对象的DDL。

为此,我使用来自银行本身的查询作为:

select * from user_objects; 
select * from user_constraints;
select * from user_source;

我的库存必须包含以下信息:

Inventory information here.

如何在不使用函数的情况下从对象获取 DDL 命令:

dbms_metadata.get_ddl(); 

元数据库中没有其他现成的函数。

我有 也试过这个:

SELECT 
(CASE WHEN line = 1 THEN 'create or replace ' || text ELSE text END) texto 
FROM user_source
WHERE NAME = '....'
ORDER BY line

但是这个命令没有得到table个对象的ddl。

获取视图的DDL,非常简单:

SELECT VIEW_NAME, TEXT FROM ALL_VIEWS; 

如果您希望它 return 只是特定视图的文本,请执行以下操作:

SELECT TEXT FROM ALL_VIEWS
WHERE VIEW_NAME LIKE '[name_of_view]';

获取 tables 的 DDL 比较麻烦,但可以通过从多个系统视图查询数据来完成:

ALL_TABLES
ALL_TAB_COLUMNS
ALL_COL_COMMENTS
ALL_CONSTRAINTS
ALL_CONS_COLUMNS
ALL_INDEXES
ALL_IND_COMMENTS

例如,如果您想获取 TABLE1 的所有列名及其数据类型,您可以这样做:

SELECT COLUMN_NAME, DATA_TYPE FROM ALL_TAB_COLUMNS
WHERE TABLE_NAME LIKE 'TABLE1';

要获取 table 上所有约束的列表,查询是:

SELECT * FROM ALL_CONSTRAINTS
WHERE TABLE_NAME LIKE 'TABLE1';

要获得完整的 table 定义,需要对如何使用这些系统视图有相当好的理解。可以在这里找到一个非常有用的页面:6 Useful Oracle Data Dictionary Queries Every DBA Should Have