有没有什么办法来检索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