0

我遇到了一个非常大的问题。我正在编写一个应用程序,用于使用 Oracle-DB 中的一些数据构建一个 txt 文件。

所以实际上我遇到了 data_default 列(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))

所以也许这不是“漂亮”的方式,但我在这里对 LONG 数据类型有一个大问题。我无法以这种方式从 data_default 获取数据。我在互联网上搜索,但我想在 C#-Code 中解决这个问题。如果不可能,请不要高估我的 SQL 知识 ;-)

祝你有美好的一天,克莱门斯

4

1 回答 1

0

I got the answer! After a long time of searching and forging i wanna post the final solution:

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;

And then you can create this query for example:

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'

The good thing about this is, that you can extend that function very easy and won't be limited to 1 result/execute. (i had this problem in some further ideas)

Have a nice day! ;)

于 2012-11-27T12:29:43.300 回答