修改某一张表其中一列的信息 ? 改成什么样的alter table 不行?

解决方案 »

  1.   

    对sys.col$的一张数据字典中操作的?要做什么?
      

  2.   

    create trigger a_tri
    before insert on a
    for each row
    declare
    str varchar2(100);
    begin
    str:='alter table ...';
    execute immediate str;
    end;
    /
      

  3.   

    谢谢各位!!
    但大家可能没理解我的问题,简单一点,还是把语句贴出来吧!
    UPDATE SYS.COL$ SET NAME='temp' where OBJ#=23884 AND NAME='tempup';
    这句话在触发器里执行就会出错,可是在sql/plus里直接输入就没有错,我把它放到存储过程里执行,又说我的权限不够,这是为什么呀??
      

  4.   

    不说别的  sys.col$ 是系统表 不要用这种方法修改 oracle 是严重不支持这种做法的
    就是想改个列名嘛
    你的数据库是什么版本的 9i可以用 alter table 更改  8i可以考虑用 view 来弥补这种情况
    如果你真的想 UPDATE SYS.COL$ 就 connect sys as sysdba 然后 grant all on col$ to username
      

  5.   

    to l2g32003(T2-X):
      我用的是8.1.7数据库,你说的用view方式,能说清楚点吗??
     谢谢
      

  6.   

    to  dinya2003(OK) :
      我是实在想不出好方法了,你有什么办法吗??
      

  7.   

    to dinya2003(OK):
      我有一张表a,里面存储着其它表(b或其它)的名称和一些相关信息,当对表a进行插入操作时,触发器要在当前表空间里建立一张表b,当更新a记录时,在触发器里要更新表b的信息,其中包括更改表中的列名,等等其它的操作。
      

  8.   

    view:
    create or replace view
    (col1,col2,col3,temp,col4)
    as
    select col1,col2,col3,tempup,col4 from yourtablename
      

  9.   

    to marvinhong(边城骆驼)
      谢谢你的回复!!   
      不过我不是想问怎么建一张视图,我是想问我的问题怎么用视图的方式解决!!
      能给予指教吗??
      

  10.   

    在更新a表的触发器中用动态sql 或dbms_sql来实现[email protected]
      

  11.   

    http://asktom.oracle.com/pls/ask/f?p=4950:8:9061023178431217056::NO::F4950_P8_DISPLAYID,F4950_P8_CRITERIA:107612348061,