Я столкнулся с той же проблемой, что описана в этом сообщении:
Выполнение функции Oracle и получение возвращаемого значения
Я могу сделать это в своем клиенте Toad успешно:
declare result varchar2(30);
BEGIN
result:=WEBUSER.F_UpdateParticipant(json input_goes here);
dbms_output.put_line(result);
END;
и получите возвращаемое значение, показанное в dbms_output. Эта функция возвращает:
{"Success":true}
or
{"Success":false}
Но я не могу вернуть результат в Petapoco. Я также пытался использовать выходные параметры следующим образом:
var result = new Oracle.ManagedDataAccess.Client.OracleParameter("result",Oracle.ManagedDataAccess.Client.OracleDbType.Varchar2, System.Data.ParameterDirection.Output);
var sql = "DECLARE result VARCHAR2(30);" +
"BEGIN "+
" @0:=WEBUSER.F_UpdateParticipant(@1);" +
"END;";
_db.db.Execute(sql, result, json);
res = result.ToString();
И
var result = new Oracle.ManagedDataAccess.Client.OracleParameter("result",Oracle.ManagedDataAccess.Client.OracleDbType.Varchar2, System.Data.ParameterDirection.Output);
var sql = "DECLARE result VARCHAR2(30);" +
"BEGIN "+
" @result:=WEBUSER.F_UpdateParticipant(@1);" +
"END;";
_db.db.Execute(sql, result, json);
res = result.ToString();
Да, использовал Execute и ExecuteScalar с одинаковыми результатами. Эта функция выполняет как вставку, так и обновление, поэтому я НЕ МОГУ выполнять SELECT WEBUSER.F_UpdateParticipant(json input_goes here) from DUAL;
здесь, потому что получу исключение cannot perform a DML operation inside a query
. Я действительно не хочу возвращаться к способу ADO для выполнения таких типов запросов.