Szukałem po googlach pół dnia i znalazłem wiele odpowiedzi na to właśnie pytanie, ale nawet jedna z nich nie wydawała się być właściwa…
Spytam więc tutaj: jak pobrać wartość zwracaną funkcji z bazy danych Oracla?
Powiedzmy, że mamy następującą funkcję:
create or replace function asdf(a in varchar2) return varchar2 as
begin
return a;
end;
i następujący kod w C#
OracleConnection con = new OracleConnection();
con.ConnectionString = "User Id=app;Password=password;Data Source=127.0.0.1";
con.Open();
Console.WriteLine("Connected to Oracle " + con.ServerVersion);
OracleCommand cmd = new OracleCommand("asdf", con);
cmd.CommandType = System.Data.CommandType.StoredProcedure;
OracleParameter param = new OracleParameter("a", OracleDbType.Varchar2);
param.Value = "lol";
cmd.Parameters.Add(param).Direction = ParameterDirection.Input;
param = new OracleParameter("RETURN_VALUE", OracleDbType.Varchar2);
param.DbType = DbType.String;
cmd.Parameters.Add(param).Direction = ParameterDirection.ReturnValue;
cmd.ExecuteNonQuery();
Console.WriteLine("Answer: " + cmd.Parameters["RETURN_VALUE"].Value);
con.Close();
con.Dispose();
Problem polega na tym, że moja odpowiedź to pusty string… Co więc robię źle?