.net - 如何使用 ADO.NET 和 Oracle 在一次调用中运行多个不同的 `insert` 语句?

标签 .net sql oracle batch-file

以下内容适用于 MS SQL Server,但我们的 Oracle 系统会抛出错误:ORA-00911:无效字符

字符串 strQuery = @"

insert into DEVICE
( DEVICE_ID, DEVICE_NAME, TIMESTAMP) values
(:DEVICE_ID,:DEVICE_NAME, sysdate);
insert into INV
( INV_ID, DEVICE_ID, COMMENT, TIMESTAMP) values
(:INV_ID,:DEVICE_ID,:COMMENT, sysdate);

";

OracleConnection conn = getConn();
OracleCommand cmd = new OracleCommand(strQuery, conn);
cmd.Parameters.AddWithValue(":DEVICE_ID", device.Id);
cmd.Parameters.AddWithValue(":DEVICE_NAME", device.Name);
cmd.Parameters.AddWithValue(":INV_ID", newInvId());
cmd.Parameters.AddWithValue(":COMMENT", device.Comment);

这只是一个示例,但假设某些字段非常大并且有大量语句等。

编辑:将语句放入一个 block 中(如托尼·安德鲁斯的回答)会导致以下错误:

[OracleException (0x80131938): ORA-06550: line 1, column 1:
PLS-00103: Encountered the symbol "" when expecting one of the following:

   begin case declare exit for function goto if loop mod null
   package pragma procedure raise return select separate type
   update while with <an identifier>
   <a double-quoted delimited-identifier> <a bind variable> <<
   form table call close current define delete fetch lock insert
   open rollback savepoint set sql execute commit forall merge
   library OPERATOR_ pipe
]

最佳答案

我不确定,但是如果你把它变成这样的 PL/SQL 匿名 block ,它会起作用吗?:

string strQuery = @"
begin
  insert into DEVICE
    ( DEVICE_ID, DEVICE_NAME) values
    (:DEVICE_ID,:DEVICE_NAME);
  insert into INV
    ( INV_ID, DEVICE_ID, COMMENT) values
    (:INV_ID,:DEVICE_ID,:COMMENT);
end;
";

关于.net - 如何使用 ADO.NET 和 Oracle 在一次调用中运行多个不同的 `insert` 语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6225536/

相关文章:

c# - 如何在 C# 中将 ushort 转换为 short?

MySQL 从表 1 中选择一行,从表 3 中选择几行

sql - WHERE ALL 没有按预期工作

java - Weblogic 10.3开启管理员端口后无法访问

.net - 适用于 SAP R/3 RFC 的 ERPConnect - 有什么好处吗?

c# - 将 C# 泛型类型作为参数传递

c# - 如何处理 .NET 5 控制台应用程序中任务管理器中的 "End Task"?

使用 OR 子句的 SQL 查询性能

java - Oracle 不是有效的函数或过程名称

Oracle减去天数和分钟数