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 に答える