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