在一个Query <t>中插入+ Select语句使ORA-00933:SQL命令未正确结束

时间:2016-03-18 12:49:42

标签: oracle dapper

我想用dapper在一个“run”中做一个简单的INSERT-and-then-SELECT-it-query,大致如下:

var query = "INSERT INTO Table(Id, Value) Values(1, :value);" +
            "SELECT Id, Value FROM Table WHERE Id = 1;"

Connection.Query<Item>(query, new { value = value});

这只是给了我ORA-00933: SQL command not properly ended。如果我在Oracle SQL Developer中运行完全相同的查询(在“一次运行”中,手动替换了params),它运行正常。

如果我将其分成两部分,并执行此操作:

var insert = "INSERT INTO Table(Id, Value) Values(1, :value);"
var select = "SELECT Id, Value FROM Table WHERE Id = 1;"

Connection.Execute(insert, new { value = value});
var item = Connection.Query<Item>(select);

......它运作正常。我已经尝试删除最后一个分号(在其他问题中似乎是 thing ),没有运气。

我在另一个使用SQL Server的项目中成功完成了同样的事情。

使用Dapper 1.42。

有人能看到这里有什么问题吗?

1 个答案:

答案 0 :(得分:1)

试试这个。在Insert中添加“返回子句”并声明输出参数。

  var param = new DynamicParameters();
param.Add(name: "IinsValue", value: value, direction: ParameterDirection.Input);
param.Add(name: "Id", dbType: DbType.Int32, direction: ParameterDirection.Output);
param.Add(name: "Value", dbType: DbType.String, direction: ParameterDirection.Output);
Connection.Execute("INSERT INTO Table(Id, Value) Values(1, :value) returning Id,Values into :id, :value", param );
var Id = param.get<int>("Id");
var Val = param.get<String>("Value");