.net 调用Oracle PL/SQL函数,该函数从C代码返回一个SYS\u REFCURSOR
ORACLE PL/SQL函数返回SYS\u REFCURSOR类型的变量。函数源代码如下所示.net 调用Oracle PL/SQL函数,该函数从C代码返回一个SYS\u REFCURSOR,.net,oracle,odp.net,.net,Oracle,Odp.net,ORACLE PL/SQL函数返回SYS\u 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_
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;
下面的代码用于将数据从数据库中获取到C中
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代码是否关闭了它打开的光标
如果您发现使用所述方法将数据从数据库检索到C代码的方式不合适,请告诉我。使用OracleReader reader=cmd.ExecuteReader。。。。。。