带有GlobalTemporaryTable的OracleDataAdapter:FillSchema无法正常工作

时间:2014-10-15 16:13:57

标签: sql .net oracle dataadapter global-temp-tables

我在.net中的FillSchema上使用OracleDataAdapterSelectCommand适用于全局临时表。

首次运行时,效果很好。我将获得全局临时表的模式

然后我删除了临时表和一个具有不同模式的新临时表。

之后,对于第二次运行,FillSchema方法仍将从旧的删除临时表中返回模式。

我错过了什么吗?不应该使用select命令从新版本的临时表中查询模式吗?

感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

什么行不通: 使用的OracleDataAdapter.SelectCommand FillSchema是:

从TableName中选择*

什么有效: 我需要将该查询更改为确切的架构, 然后它起作用:

从TableName

中选择column1,column2,column3

我不明白为什么,但这解决了我的问题。 它将返回新的全局临时表的模式。 这是oracle服务器的缓存问题吗?因为 tableName总是一样的吗?

答案 1 :(得分:-1)

使用程序方法解决此问题

OracleParameter inputParam = new OracleParameter("TABLE_NAME_IN",OracleDbType.Varchar2,"TEST",ParameterDirection.Input); //Query TableName
OracleParameter refParam = new OracleParameter("OUTPUT",OracleDbType.RefCursor,ParameterDirection.Output);//RefCursor
DataTable dt = new DataTable();//Fill DataTable     
using (OracleCommand dbCommand = new OracleCommand("PKG_SYS.SELECT_TABLE_DATA",orclConnection))
{
    dbCommand.CommandType = CommandType.StoredProcedure;
    dbCommand.Parameters.Add(inputParam);
    dbCommand.Parameters.Add(refParam);
    using (OracleDataAdapter da = new OracleDataAdapter())
    {
        da.SelectCommand = dbCommand;
        da.Fill(dt);
     }
}