是呀,我也想知道比如select * from all_views 里的 TEXT 字段类型就是LONG 每次都只是读取固定长度十几个字符出来,,其实里面有很多的东西 ,、怎么办呀??

解决方案 »

  1.   

    实施步骤
    1、先建立一个存储过程,作用是读取long信息,
       因为我的过程一次性返回long的信息,我这里定义了30000个字符
       所以最多只能返回30000个字符
       如果我没读取一行返回信息,就能全部返回long的信息
       不过我这里一次性返回30000字符已经可以满足你的要求
    create or replace procedure readlong
    (viewname in varchar2,viewtext in out varchar2)
    as
    eachrow varchar2(30000);
    begin
      for row_str in (select text from user_views where view_name=upper(viewname) and rownum =1) loop
          eachrow := eachrow||trim(row_str.text);
      end loop;
      viewtext := eachrow;
      eachrow  := '';
    end;
    /2、我不会VB,只好用delphi测试,反正都一样的,在你的VB/DELPHI调用这个存储过程即可
    with adostoredproc1 do
      begin
        close;
        parameters.parambyname('viewname').value:='你的VIEW名';
        parameters.parambyname('viewtext').value:='';
        execproc;
      end;
    edit1.text:=adostoredproc1.parameters.parambyname('viewtext').value;另外:
    如果你要在SQLPLUS里面显示long的信息
    可以这样写存储过程,下面的过程可以完全显示long的信息,因为是读一行显示一行的
    上面的程序由于考虑了VB/DELPHI的调用,所以最多显示long的30000个字符
    你也可以改改上面的程序,全部显示long的内容,但是会影响效率
    create or replace procedure readlong
    as
    eachrow varchar2(4000);
    begin
      for row_str in (select text from user_views where view_name='你的VIEW名' and rownum =1) loop
          eachrow := trim(row_str.text);
          dbms_output.put_line(eachrow);
      end loop;
    end;
    /
      

  2.   

    刚刚说的有点小错误,在读取的时候只读了一行,但是已经足够长了,谁会写个view超过30000字符啊。。所有偶上面的代码是对的。。而且保险。。
    create or replace procedure readlong
    as
    eachrow varchar2(4000);
    begin
      for row_str in (select name from aa where rownum =1) loop
          eachrow := trim(row_str.name);
      end loop;
      dbms_output.put_line(eachrow);
    end;
    /