我要从系统表读字段的默认值,sys.col$记录了这些内容,其中的default$字段是long类型,记录了默认值。
中但是vb.net把表读到dataset后,再访问该字段,得到空字符串!
vs.2003和vs.2005都是这样,说明不是.net的问题;
我的电脑和同事的电脑都这样,说明不是oracle客户端的问题,而且PL/SQL Developer中可以读到。
但是我自己定义的表,当中的long字段,却可以读出正确内容。
---------------------------------------
快疯了,帮帮忙,有没有人遇到这个情况?

解决方案 »

  1.   

    所有字段都可以,自己定义的long字段也可以,就是系统表的long字段不行。我用sys用户登录也一样。都不知道是不是.net的DataSet是不是与Oracle不兼容。但是我在网上查到的例子,代码也是这样的,都不知道他的代码自己是否测试过。
      

  2.   

    LONG to VARCHAR2 Function
    CREATE OR REPLACE FUNCTION LONG_TO_CHAR( in_rowid rowid,in_owner
    varchar,in_table_name varchar,in_column varchar2) 
    RETURN varchar AS 
    /*
    CREATE BY: D.Jenkins
             Date: 28-Apr02003          Use:  Long to varchar2 conversion,
                   to allow a substring on long column in the table; 
      
             Notes: 
             Errors out with varchar > 32767        
             ORA-06502: PL/SQL: numeric or value error: character string
                buffer too small          Synonyms and Grants:
             create public synonym LONG_TO_CHAR for
                synergen.CDBF_LONG_TO_CHAR; 
             grant execute as required 
             or
             grant execute long_to_char to public; 
                
    */text_c1 varchar2(32767);
    sql_cur varchar2(2000);
    --
    begin
      sql_cur := 'select '||in_column||' from
    '||in_owner||'.'||in_table_name||' where rowid =
    '||chr(39)||in_rowid||chr(39);
      dbms_output.put_line (sql_cur);
      execute immediate sql_cur into text_c1;  text_c1 := substr(text_c1, 1, 4000);
      RETURN TEXT_C1;  
    END;
    /
      

  3.   

    select l.*,LONG_TO_CHAR(rowid,'system','longtest','value') from longtest l