我正在尝试使用 .Net 中的 OracleClientProvider 来执行 PL/Sql 块。我使用的语言是c#,数据库是oracle10g
我实际上在做的是以下内容:
//ConnectionSting is the connection String
OracleConnection connection = new OracleConnection(connectionString);
OracleCommand cmd = new OracleCommand();
cmd.Connection = connection;
// Open the connection
connection.Open();
//queryFile contains the PL/SQL Script I am trying to execute;
String queryFile = ConfigurationManager.AppSettings["MasterDbScript"];
String dataInFile = new StreamReader(queryFile).ReadToEnd();
cmd.CommandText = dataInFile;
connection.Open();
cmd.ExecuteNonQuery();
//close the connection
connection.close();
当我通过 ORACLE 客户端运行 PL/SQL 块时,它可以正确执行,但在这里它会抛出错误 ORA-00922: missing or invalid option
我想问: 1. 脚本的执行方式与普通查询不同吗?2.我做错了什么?
建议/答案
谢谢。
根据我有限的理解,块应该嵌入到 C# 中或放入包中并调用。我见过这样的:
由于您没有向我们展示您的脚本,让我们反过来工作。在您的数据库中创建一个表
并将以下内容放入您的脚本文件中
执行代码后,您可以通过从数据库中选择来检查它是否有效。
下一步将使用一些开始结束;块不返回任何结果集。
通常 Ado 不能处理整个脚本。使用 sql-server 它可以处理批处理,这些批处理是由 go 语句分隔的脚本的一部分。据我所知,对于 Oracle,它只能处理单个 sql 语句或开始结束块。
编辑:这是一个小 PowerShell,你可以用它来尝试什么是可能的:
例如,您会看到以下失败(我添加了一个分号):
这也失败了:
在第一个近似值中,您可以将“/”视为类似于 sql-server 批处理分隔符 go。