C# 无法通过ODBC从Oracle获取长值

C# 无法通过ODBC从Oracle获取长值,c#,sql,oracle,odbc,C#,Sql,Oracle,Odbc,我有个大问题。 我正在编写一个应用程序,用于使用Oracle数据库中的一些数据构建txt文件 事实上,我遇到了一个关于data_默认列类型LONG的问题 让我们发布一些代码: 以下是我的选择: SELECT table_name || '.' || column_name, data_precision, data_type, nullable, data_length, data_default 以下是我读取数据的方法: string dataDefault = (dataReader[5

我有个大问题。 我正在编写一个应用程序,用于使用Oracle数据库中的一些数据构建txt文件

事实上,我遇到了一个关于data_默认列类型LONG的问题

让我们发布一些代码:

以下是我的选择:

SELECT table_name || '.' || column_name, data_precision, data_type, nullable, data_length, data_default 
以下是我读取数据的方法:

string dataDefault = (dataReader[5].GetType() == typeof(DBNull)) ? "" : Convert.ToString(dataReader.GetString(5))
因此,也许这不是一个很好的方式,但我这里有一个关于长数据类型的大问题。我无法以这种方式从默认数据中获取数据。 我在网上搜索过,但我想用C代码解决这个问题。如果不可能,请不要高估我的SQL知识-

祝你今天愉快,
克莱门斯

我得到了答案!经过长时间的搜索和锻造,我想发布最终解决方案:

create or replace function get_col_default
(
p_owner in all_tab_cols.owner%type,
p_table_name in all_tab_cols.table_name%type,
p_column_name in all_tab_cols.column_name%type
)
return varchar2
as
        l_data_default LONG;
begin
        select data_default into l_data_default
          from all_tab_cols
         where owner = p_owner
           and table_name = p_table_name
           and column_name = p_column_name;

        return substr( l_data_default, 1, 4000 );
end;
然后您可以创建此查询,例如:

select a.table_name, a.COLUMN_NAME, get_col_default('exOwner',a.table_name,a.COLUMN_NAME) 
from all_tab_columns a
where  table_name like 'table%'
and owner like 'exOwner'
这样做的好处是,您可以非常轻松地扩展该函数,并且不限于1个结果/执行。我在进一步的想法中遇到了这个问题

祝你今天愉快