更新表和出引用记录存储过程Oracle

Posted

技术标签:

【中文标题】更新表和出引用记录存储过程Oracle【英文标题】:Update Table and out refcursor Records Stored Procedure Oracle 【发布时间】:2018-01-19 15:16:13 【问题描述】:

我在 Oracle 包中创建了一个过程。当我从 TOAD 执行包时,我可以在输出中看到更新的记录。但是当通过控制台应用程序调用时,相同的过程返回 0 条记录。我不知道为什么。

可能是我在某个地方犯了一个新手错误,但请让我知道我在这里做错了什么。

PROCEDURE TestProc( Cur_Result out sys_refcursor)
As 
begin

Update Table1 where condition-1; 
Commit;
Update Table1 where condition-2; 
Commit;

open Cur_Result for
select * from Table1;

END TestProc;

使用 .NET 代码从控制台应用程序调用过程 - 从 TOAD - 从模式浏览器执行包。 控制台应用程序 - 调用如下过程 -

Using conn As New OracleConnection(ConfigurationManager.ConnectionStrings("CS").ConnectionString)
            conn.Open()
            cmd = New OracleCommand(SchemaName & "." & "TestProc", conn)
            cmd.Parameters.Add("CUR_RESULT", OracleType.Cursor).Direction = ParameterDirection.Output
            cmd.CommandType = CommandType.StoredProcedure
            da = New OracleDataAdapter(cmd)
            ds = New DataSet
            da.Fill(ds)
            ''''Do something with DataSetRecords
            conn.Close()
        End Using

【问题讨论】:

更新的输出记录我没有看到任何显示它的地方。发布您的确切代码 你怎么称呼这个?在 TOAD 和控制台中。 用更多信息更新了我上面的问题。 可能是cmd = New OracleCommand(SchemaName & "." & "TestProc(:CUR_RESULT)", conn)? 使用DataTable 而不是DataSetDataSet 的目的是有几个DataTables 的集合,在你的程序中不是这样的。 【参考方案1】:

问题不在我提到的任何一个代码中,它存在于其他地方。我正在使用测试脚本在表中插入记录,但我错过了在脚本末尾添加 Commit。 我最近从 SQL Server 切换到 Oracle。事务处理是 oracle 和 SQL SERVER 之间最大的区别。 我真是个笨蛋。还是谢谢大家。

【讨论】:

我错过了在脚本末尾添加 Commit,但我可以清楚地看到你原来的问题,你有commit

以上是关于更新表和出引用记录存储过程Oracle的主要内容,如果未能解决你的问题,请参考以下文章

求教oracle存储过程的赋值和更新

oracle存储过程

oracle存储过程

Oracle存储过程merge into

oracle 存储过程

oracle 如何返回多条记录