【发布时间】:2022-08-11 21:19:49
【问题描述】:
我在 Oracle 中有一个存储过程,我试图从 .Net Core 应用程序调用它。
proc 循环遍历游标以填充全局临时表,并尝试将结果作为引用游标发送回。
Type ssp_rec_refcur Is Ref Cursor; -- Return ssp_rec;
Procedure temp_table_sel(p_ssp_rec_refcur Out ssp_rec_refcur) Is
Cursor cur_main Is
Select item1
,item2 etc..
From regular_table;
Begin
For c_rec In cur_main Loop
-execute some functions to get supplemtary data based on cursor row
--store values in temp table for ref cursor
Insert Into global_temp_table
Values
(c_rec.item1, c_rec.item2, c_rec.item3 etc...);
End If;
End If;
End Loop;
Open p_ssp_rec_refcur For
Select * From global_temp_table;
Exception
When Others Then
log_error($$plsql_Unit, \'temp_table_sel\');
End temp_table_sel;
这在对数据库本身进行测试时效果很好,但是当我尝试从 .Net 执行它时,我得到了错误:ora-01002 fetch out of sequence。
如果我提出一个承诺;在 select 语句之前的命令它消除了错误,但是表是空的,因为它在提交时删除了行;
如果我在 Select 语句之后放置一个 Commit,它会返回错误。
如何在不触发 Fetch Out of Sequence 错误的情况下将临时表行读入引用游标?
-
我认为问题不在此程序范围内。检查从游标读取的代码,我假设您在获取最后一条记录后仍尝试从游标读取。
-
@MartinSchapendonk 我认为是 Oracle.ManagedDataAccess.dll 在事务后发送自动提交。
标签: oracle .net-core stored-procedures temp-tables oracle19c