Использование dbms_output.put_line(var_zi_controle_id);
для вывода переменной неверно, это не будет работать с языками программирования / драйвером базы данных, такими как ODP.Net, это для печати и проверки консоли.
Dapper
состоит из набора методов расширения, которые расширяют IDbConnection
интерфейс ADO.Net, для Oracle внутри вы должны заполнить ODP.Net - OracleConnection
объект, теперь, когда вы проверяете руководство ODP.Net для вызова любого из PL Хранимые процедуры SQL, у вас есть следующие опции:
- Привязать параметр Output или Return и заполнить параметр в процедуре PL SQL. Используя Dapper, вам нужно
DynamicParameter
для привязки параметров рядом с Input, как Output / Return
- Другой вариант - это способ, которым вы сейчас пытаетесь, вы ожидаете, что оператор
Select
вернет значение как целое число, так что вам нужно Select var_zi_controle_id
в процедуре, которая будет выглядеть как QueryResult, но все же вам потребуется Тип T, который содержит целочисленное значение, здесь вы получите класс / класс с одним целочисленным свойством var_zi_controle_id
. Query<T>
хотя и возвращает IEnumerable<T>
Мой предпочтительный способ - добавить параметр Output, назначить его в хранимой процедуре и получить значение, проверить ссылки внизу для хорошей справки. Простой пример будет:
var dynamicParameters = new DynamicParameters();
dynamicParameters.Add("var_zi_controle_id",0,DbType.Int32,ParameterDirection.Output)
Parameter Direction
опции InputOutput
и ReturnValue
также могут использоваться, но ReturnValue
требуется явное возвращаемое значение из процедуры
// Выполнить хранимую процедуру
conn.Execute(@"ProcedureName", dynamicParameters, commandType: CommandType.StoredProcedure);
// Выбор значения параметра O / p из dynamicParameters
var id = dynamicParameters.Get<int>("var_zi_controle_id");
Важно, чтобы параметр Output var_zi_controle_id
, который связывается с хранимой процедурой, был задан до возврата вызова для значения, которое нужно извлечь
Связывание параметров OracleCommand SQL
https://docs.oracle.com/database/121/ODPNT/OracleCommandClass.htm#ODPNT458
https://docs.oracle.com/cd/E11882_01/win.112/e23174/OracleParameterClass.htm#ODPNT1722