我想要把数据库中的一部分表中的数据内容给它补成最大数量,这样就可以查看出画面中是否因为数据太长而出错了,
各位明白意思了吗
想要个ORACLE的存储过程来实现,加入把CHAR类型的空格之类的都去掉,然后用0 这个字符都给替换了。

解决方案 »

  1.   

    我就像要 t_if_history 表中的数据,想让某些字段中的内容,补到定义的最大长度上。把表中的数据都弄成最大的。
      

  2.   

    或是把这个表中的 字段是 NVARCHAR2 这个类型的数据内容给他补成最大,补全了,用别的随便内容给替换上。
    因为时间类型,或是CHAR类型是需要进行和其他的表关联的,就不能随便给它补位了。不然就关联不上了
      

  3.   

    你直接UPDATE就可以了吧,写个存储过程比较费事
      

  4.   

    那怎么UPDATE呢 怎么知道长度呢。 因为有好几张表,
      

  5.   

    UPDATE的时候如何能取得这个字段的最大长度呢 而且一个一个字段的修改比较麻烦,能不能一次性的把NVARCHAR2 类型的所有字段都给他补成最大长度的内容
      

  6.   

    那就从数据字典里面取出列信息,一个列一个列去UPDATE
      

  7.   

    --取出表中的数据类型为'VARCHAR2'或'NVARCHAR2'的列
    select COLUMN_NAME,DATA_TYPE
    from all_tab_columns where owner ='DATAREP' and table_name = 'DIM_DISC'
    and data_type in ('VARCHAR2','NVARCHAR2')
      

  8.   

       select v.DATA_TYPE,v.DATA_LENGTH,v.* from user_tab_columns v;
       
       select * from all_tables ;   你可以先看看这两个试图的结构,然后写个匿名块来循环执行。    类似的写法:
      declare
       
              sqlstr varchar2(2000);      
                   
       begin 
             for c in (select t.COLUMN_NAME, t.DATA_TYPE,t.TABLE_NAME from user_tab_columns t where t.TABLE_NAME=upper('tableA')) loop                  sqlstr:='update tableA set '||c.column_name||' =''999999'' where '||c.column_name||' is null';
                      
                      execute immediate sqlstr;
                      
             end loop;   end;    
      

  9.   

    我写了,不过很慢。 
    还不如 update M_REASON set  REASON_DESC ='wwwwwwwwwwwwwwwwwwwwwwwwwwwww'; 直接更新呢 
    呵呵 请问ORACLE里面是否有补位的函数呢, 直接写的, 在原数据上直接加入,假如不足的时候用W代替。 
      

  10.   

    可以试试Lpad或rpad左补齐,右补齐函数。具体请google