问题描述
ORACLE PL / sql函数返回类型为SYS_REFCURSOR的变量。函数源代码如下
function get_list(
ain_page_number in number)
return SYS_REFCURSOR
is
t_t_wk_req SYS_REFCURSOR;
begin
OPEN t_t_wk_req FOR
SELECT
numero wk_req_id,cd_atividade wk_req_act_cd,cd_componente wk_req_asset_cd,cd_tipo wk_req_maint_tp_cd,cd_mao wk_req_maint_craft_cd,status_andamento wk_req_status_andamento,obs wk_req_des,row_number wk_req_row_number
FROM
(
SELECT
ab.*,ROWNUM row_number
FROM
(
SELECT
numero,cd_atividade,cd_componente,cd_tipo,cd_mao,status_andamento,obs
FROM
emer_comp
ORDER BY
numero DESC
)ab
)
WHERE
row_number >((ain_page_number - 1)* 20)
AND row_number <(ain_page_number * 20 + 1);
return t_t_wk_req;
end get_list;
using (OracleConnection connection = (OracleConnection)_context.Database.Connection)
{
using (OracleCommand cmd = new OracleCommand($"wk_req_get_list.get_list",connection))
{
connection.open();
cmd.CommandType = CommandType.Text;
cmd.CommandText = "BEGIN :t_t_wk_req := wk_req_get_list.get_list("+pageNumber+"); END;";
cmd.BindByName = true;
OracleParameter param1 = new OracleParameter("ain_page_number",OracleDbType.Int32);
param1.Value = pageNumber;
param1.Direction = ParameterDirection.Input;
cmd.Parameters.Add(param1);
cmd.Parameters.Add("t_t_wk_req",OracleDbType.RefCursor,ParameterDirection.ReturnValue);
var dr = await cmd.ExecuteReaderAsync();
var result = new List<WorkRequestListModel>();
while (dr.Read())
{
var m = new WorkRequestListModel();
m.Number = Convert.ToInt32(dr.GetValue(0));
m.CdAtividade = dr.GetValue(1).ToString();
m.CdComponent = dr.GetValue(2).ToString();
m.CdTipo = dr.GetValue(3).ToString();
m.CdMao = dr.GetValue(4).ToString();
m.StatusAndamento = dr.GetValue(5).ToString();
m.Obs = dr.GetValue(6).ToString();
result.Add(m);
}
connection.Close();
return result;
}
}
如果您发现您认为使用上述方法从数据库将数据检索到C#代码的方式不合适的话,请告诉我。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)