c# - 在 C# 中的存储过程中使用全局临时表

标签 c# oracle

我想在我的 Oracle 过程中使用全局临时表。为此,我创建了一个全局临时表:

CREATE GLOBAL TEMPORARY TABLE temp_test
(id int)
ON COMMIT PRESERVE ROWS;

我也创建了一个程序:

CREATE OR REPLACE PROCEDURE PROC_TEST ( p_recordset OUT SYS_REFCURSOR) AS 
BEGIN
OPEN p_recordset FOR  
 SELECT * FROM temp_test;
EXCEPTION
 WHEN NO_DATA_FOUND THEN
  NULL;
   WHEN OTHERS THEN
    -- Consider logging the error and then re-raise
     RAISE;    
END PROC_TEST;

当我执行在我的临时表中插入行的过程时,它工作正常:

INSERT INTO temp_test (id) values(1);
INSERT INTO temp_test (id) values(2);
INSERT INTO temp_test (id) values(3);
INSERT INTO temp_test (id) values(4);
INSERT INTO temp_test (id) values(5);
INSERT INTO temp_test (id) values(6);
INSERT INTO temp_test (id) values(7);
INSERT INTO temp_test (id) values(8);
INSERT INTO temp_test (id) values(9);
INSERT INTO temp_test (id) values(10);
INSERT INTO temp_test (id) values(11);

var c refcursor;
execute proc_test(:c);
print c;

但是当我在 C# 应用程序中运行它时,它不会通过以下代码在此过程中返回任何行:

using (OracleConnection connection = new OracleConnection(System.Configuration.ConfigurationManager.ConnectionStrings["MyContext"].ToString()))
            {
                connection.Open();
                OracleCommand command = connection.CreateCommand();

                command.CommandText = "DELETE FROM temp_test";
                command.ExecuteNonQuery();

                for (int i = 0; i < 10; i++)
                {
                    command.CommandText = string.Format("INSERT INTO TEMP_INT_1(ID_INT) VALUES ({0})", i);
                    command.ExecuteNonQuery();
                }

                command.CommandText = "PROC_TEST";
                command.CommandType = CommandType.StoredProcedure;

                command.Parameters.Add(new OracleParameter("p_recordset", OracleType.Cursor)).Direction = ParameterDirection.Output;

                OracleDataAdapter adapter = new OracleDataAdapter(command);
                DataSet ds = new DataSet();
                adapter.Fill(ds);



                connection.Close();
            }

我应该怎么做才能在我的 C# 应用程序中正确返回这些行?

最佳答案

我在 TEMP_INT_1 表中寻找插入行并尝试选择 TEMP_TEST 表,这就是它不起作用的原因。

关于c# - 在 C# 中的存储过程中使用全局临时表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45699690/

相关文章:

c# - 'MongoDB.Bson.BsonElement' 不是简单 POCO 上的属性类

c# - 不规则形状的 Windows 窗体 (C#)

sql - 将单个值插入到新创建的列中

c# - 如何在 DataGridView 中显示波斯日期时间

c# - 服务器端分页不适用于第一页 kendo grid mvc 包装器

sql - 是否有理由不在 Oracle 中使用 View ?

sql - 如何将存储在 varchar2 中的时间转换为 Oracle 中的 24 小时格式?

sql - Oracle获取列值改变的行

c# - 使用事件处理传递数据

sql - 对值进行分组以便按值的最小值排序,然后按该值本身对其他字段进行排序