Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ORA-00922:缺少或无效选项| SQL*PLUS使用OracleClient的命令_C#_Oracle_Ado.net_Oracleclient - Fatal编程技术网

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

C# ORA-00922:缺少或无效选项| SQL*PLUS使用OracleClient的命令,c#,oracle,ado.net,oracleclient,C#,Oracle,Ado.net,Oracleclient,我想我试图执行的查询中有一些问题。您试图通过驱动程序执行SQL*Plus命令。我认为这是办不到的 无法在Oracle客户端上执行SQL*plus命令。SQL*plus命令仅受SQL*plus和一些Oracle工具(如SQL Developer)的支持 您的代码基本上迭代当前用户的所有对象,然后删除它们。您应该能够通过循环实现相同的目标: OracleConnection conn = new OracleConnection(); conn.ConnectionString =

我想我试图执行的查询中有一些问题。

您试图通过驱动程序执行SQL*Plus命令。我认为这是办不到的

无法在Oracle客户端上执行SQL*plus命令。SQL*plus命令仅受SQL*plus和一些Oracle工具(如SQL Developer)的支持

您的代码基本上迭代当前用户的所有对象,然后删除它们。您应该能够通过循环实现相同的目标:

    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();
您需要添加一些代码来正确关闭命令和读取器实例以及处理错误


您可能需要默默地放弃错误,并尝试重复上述代码多次,直到成功删除所有对象,因为只要其他对象依赖于它,某些对象就无法删除。

那么,有没有办法使用我的驱动程序来完成相同的操作?我认为上面的脚本只是清除了指定数据库中的所有内容。最好的方法是删除用户并重新创建它。当父表在子表之前被删除时,当索引被删除并且由于表被删除而不存在时,上述方法会出错,等等。。另一种方法是编写一个存储过程,清除所有内容并从代码中调用。我认为我们无权删除用户并重新创建它。您能告诉我其他方法吗?谢谢,即使我使用您的方法删除对象,问题是我必须恢复该数据库(我们有DMP和文本文件)并使用SQL PLUS进行备份。有什么方法可以做到这一点吗?DMP文件是来自exp还是expdp实用程序?你有什么样的文本文件来恢复数据库?您希望如何使用SQLplus备份数据库?无论如何,最好的方法是在单独的进程中运行SQLplus、imp、impdb等。
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();
}