ORA-00922:缺少或无效选项|使用OracleClient的SQL * PLUS命令

时间:2012-08-16 06:50:39

标签: c# oracle ado.net oracleclient

    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();

我想在我尝试执行的查询中存在一些问题。

2 个答案:

答案 0 :(得分: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();
}

您需要添加一些代码才能正确关闭命令和读取器实例以及处理错误。

你可能需要静默地丢弃错误并尝试多次重复上面的代码,直到所有对象都被成功删除,因为只要其他对象依赖它就会丢弃一些对象。

答案 1 :(得分:0)

您正尝试通过驱动程序执行SQL * Plus命令。我不认为这可以做到。