修改表a的表结构:想把把字段city的数据类型由varchar(2000)改为long
具体过程:
1.新建了一个字段city_new varchar(2000)
2.将原来city数据导入city_new。
3.将city数据清空。
4.把字段city的数据类型改为long。
5.将数据导回city中。
(这么麻烦因为oracle不允许在city列中数据时候更改类型)
请问各位大侠,如果做了这些修改后能不能用“回滚”机制,将修改后的表恢复到修改前?具体怎么写sql脚本呢?还只只能通过备份表才行?(目的是为了防止修改带来错误,想要恢复到修改前状态)
先谢谢各位大虾了!

解决方案 »

  1.   

    回滚到初始的时候是不可能的,因为你需要用ALTER TABLE所以修改之前作好备份(用CREATE TABLE T_BAK AS SELECT * FROM T)这个表为什么还要用LONG这个限制很大的数据类型哪?
    用CLOB不是更好些
      

  2.   

    太谢谢谢love_2008(love2008)的回答了~
    用long是应为我要用from Builder做前台的显示这个表字段的工作。
    “为什么不用clob?”这个问题正好是我想问的~呵呵
    里边用到数据块sqlblock,它的数据-数据类型属性改动后选择为Long。这个是与表中的city_new long字段对应的。用来显示city_new里存的内容。内容是sql语句。
    (所用的操作应该不会受long的限制)
    1.如果改为clob,在form builder中好像没有对应的选择。(有个“对象ref”)不知道可不可以?怎们用?
    2.改为clob的话,会不会因为更站存储空间或其他问题而影响效率呢?再次谢谢love_2008(love2008)的回答~希望大家能给我帮助!多谢!
      

  3.   

    1:你的FORM BUILDER是不是版本太低了,我没有用过这个工具,所以不太清楚。
      你可以测试一个表,把数据类型改为CLOB类型的,然后选择LONG或者其他,实验下看能否显示
      REF是引用类型,你应该用不上。
      可以创建测试表:
      CREATE TABLE T AS SELECT ID,TO_CLOB(NAME) NAME FROM T1;  这样就会生成一个CLOB类型的NAME,而其他字段跟原表的类型相同,数据也都相应的插入到了T表。2:至于效率的问题,CLOB是为了取代LONG而产生的,因为LONG的限制实在太多。所以效率应该没有什么问题。
      

  4.   

    感谢love_2008(love2008)~
    我用你的方法出错TO_CLOB(NAME)中NAME我写的是已经改为long型的city字段。
    1.sql报错:无效的列名!是不是这个函数错了?可能是因为我用的FORM BUILDER版本过低~是在不成就用long。我这个字段存sql语句,只供查询使用。应该不怕限制~
    2.不知道clob如何分配空间的?我这数据量很大的,不知太会不会占空间?
    3.我给分之后能不能在继续讨论呢?呵呵~(分不够可以加分的)
    多谢love_2008(love2008)~欢迎大家讨论~
      

  5.   

    语法:
    TO_CLOB ( lob_column | char )char can be any of the datatypes CHAR, VARCHAR2, NCHAR, NVARCHAR2, CLOB, or NCLOBlong是不可以通过这个函数转换成CLOB的。CLOB字段一般用在和其他字段不放在一个表空间下,而且分给他的块大小一般是比普通表空间的大些工作中没有用过CLOB 所以我对他的研究也很少
      

  6.   

    忠心谢谢love_2008(love2008)的耐心解答。我再按你说得研究一下~
    我刚进csdn不久,感觉真的能学到好多东西~
    已经加你为好友了~希望你能通过我。有机会我们可以讨论的,呵呵
    分我给了,好像给分必须结束这个帖子了~唉,还没讨论够呢~呵呵,希望以后还有机会~