有没有办法在 c# 中检索 oracle 模式?这些是我需要的:Tables_Name、Table Columns_Name、主键、唯一键、外键
问问题
2746 次
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 回答