3

有没有办法在 c# 中检索 oracle 模式?这些是我需要的:Tables_Name、Table Columns_Name、主键、唯一键、外键

4

4 回答 4

3

表名

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;
于 2012-09-04T19:46:36.123 回答
0

您可以像选择任何其他表一样从 Oracle 中的数据字典表中进行选择。这是对数据字典表的讨论 -数据字典

于 2012-09-04T19:45:48.510 回答
0

使用DBMS_METADATA包。例如,要获取CREATE所有表的脚本,您可以:

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

这样,您只需稍加努力,就可以获得整个模式的 DDL 脚本。DBMS_METADATA文档页面上还有更多示例。

于 2012-09-04T19:51:10.153 回答
0

我使用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 });

于 2016-05-19T11:18:28.737 回答