【问题标题】:Update Table and out refcursor Records Stored Procedure Oracle更新表和出引用记录存储过程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 的集合,在你的程序中不是这样的。

标签: oracle stored-procedures plsql


【解决方案1】:

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

【讨论】:

  • 我错过了在脚本末尾添加 Commit,但我可以清楚地看到你原来的问题,你有commit
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多