0
    OracleConnection conn = new OracleConnection();
    conn.ConnectionString = @"Data Source=(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = 10.206.0.23)(PORT = 1521)))(CONNECT_DATA = (SID = ORCLWEX3)));User Id= RAMNIVAS_CI;Password= RAMNIVAS_CI;";
    conn.Open();


    SetStatus(null, "CLEARING CI DATABASE");
    OracleCommand com = new OracleCommand(@"set pages 0
                    set lines 80
                    spool c:\delete_objects_CI
                    select 'drop '||object_type||' '||object_name||';'
                    from user_objects;
                    spool off
                    start c:\delete_objects_CI.lst
                    purge recyclebin;
                    set pages 100", conn);
    com.ExecuteNonQuery();

実行しようとしているクエリに問題があると思います。

4

2 に答える 2

1

Oracle クライアントで SQL*plus コマンドを実行することはできません。SQL*plus コマンドは、SQL*plus および SQL Developer などの一部の Oracle ツールでのみサポートされています。

コードは基本的に、現在のユーザーのすべてのオブジェクトを反復処理してから削除します。ループで同じことを達成できるはずです:

OracleCommand userObjCmd = new OracleCommand("select object_type, object_name from user_objects", conn);
OracleDataReader reader = command.ExecuteReader();
while (reader.Read())
{
    OracleCommand dropCmd = new OracleCommand(
        String.Format(@"execute immedidate 'drop {0} \"{1}\"'",
            reader.GetValue(0), reader.GetValue(1)),
        conn);
    dropCmd.ExecuteNonQuery();
}

コマンドとリーダーのインスタンスを適切に閉じ、エラーを処理するためのコードを追加する必要があります。

また、エラーを黙って破棄し、すべてのオブジェクトが正常に削除されるまで上記のコードを数回繰り返す必要がある場合があります。これは、他のオブジェクトがそれに依存している限り一部のオブジェクトを削除できないためです。

于 2012-08-16T08:51:03.710 に答える
0

ドライバを介して SQL*Plus コマンドを実行しようとしています。私はこれができるとは思わない。

于 2012-08-16T07:00:13.410 に答える