获取Oracle模式(Get Oracle Schema)

2019-09-22 03:19发布

有没有什么办法来检索Oracle架构在C#中? 这些都是我需要什么:Tables_Name,表Columns_Name,主键,唯一键,外键

Answer 1:

表名 :

select * from user_tables

表的列名 :

select * from user_tab_columns

主键,唯一键,外键 :

select * from user_constraints

更普遍的 :

select * from dictionary

看到所有可以使用的可能的系统视图。

如果你想实际DDL用于创建表等可以使用dbms_metadata.get_ddl ,它返回一个CLOB。

例如:

select dbms_metadata.get_ddl('TABLE','MY_TABLE') from dual;


Answer 2:

您可以从Oracle中的数据字典表中选择,就像你的任何其他表。 下面是数据字典表的讨论- 数据字典



Answer 3:

使用DBMS_METADATA包。 例如,以获得CREATE的所有表的脚本,你会怎么做:

SELECT DBMS_METADATA.GET_DDL('TABLE', u.table_name)
  FROM USER_ALL_TABLES u

这样一来,一点点努力,你可以得到DDL脚本整个架构。 还有是更多的例子DBMS_METADATA documetation页 。



Answer 4:

我用的是OracleConnection.GetSchema方法。 我自己写的一个辅助方法每桌检索。

private class SchemaInfo
{
    public bool Mandatory { get; set; }
    public int MaxLength { get; set; }
}

private Dictionary<string, SchemaInfo> _getSchemaInfo(OracleConnection _cn, string owner, string tableName)
{
    DataTable _dt = _cn.GetSchema("Columns", new string[3] { owner, tableName, null });
    Dictionary<string, SchemaInfo> _dict = new Dictionary<string, SchemaInfo>();
    for (int x = 0; x < _dt.Rows.Count; x++)
    {
        DataRow _r = _dt.Rows[x];
        SchemaInfo _si = new SchemaInfo();
        object maxl = _r.ItemArray[10];
        if (maxl == DBNull.Value) maxl = -1;
        _si.Mandatory = (_r.ItemArray[8].ToString().Equals("N")) ? true : false;
        _si.MaxLength = Convert.ToInt32((maxl ?? 0));
        _dict.Add(_r.ItemArray[2].ToString(), _si);
    }
    return _dict;
}

您将有来查找返回拿到钥匙等其他元素,我敢肯定,是可用的(但可能是错误的)。

如果你想获得表,使用Connection.GetSchema("Tables", new string[3] { owner, null, null });



文章来源: Get Oracle Schema