2016-03-18 1 views
1

Я хотел бы сделать простой запрос INSERT-и-SELECT-it-запроса в одном «запуске» с dapper, примерно как так:Вставить + Выбрать операторы в одном запросе <T> дает ORA-00933: команда SQL закончилась неправильно

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, он работает нормально.

Если я разделил это на две части, и сделать это:

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); 

... она отлично работает. Я попытался удалить последнюю точку с запятой (которая, казалось, была вещь в других вопросах), без везения.

Я сделал то же самое с успехом в другом проекте, где я использую SQL Server.

Использование Dapper 1.42.

Может ли кто-нибудь увидеть, что здесь не так?

ответ

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"); 
+0

Я проверю это в понедельник (не могу получить доступ к db из дома), спасибо! –

+0

Посмотрел немного больше на это сейчас, и точка sortof исчезает, если я просто получу длинный список параметров. Я хочу использовать сопоставление объектов в Dapper, что и было в целом. Таким образом, я должен использовать 'Query (...)' или какую-то его форму. –

+0

Все, пока не кажется, что в этом случае это будет невозможно. Похоже, что это единственный способ сделать эти две операции в одном запросе. –