2007-01-24

在数据字典中直接修改Oracle表列名

来源: 本站收集整理 作者:佚名 评论 0 条
 

  UPDATE SYS.COL$ SET COL# = 2,NAME=‘EMP_NO’ 

    WHERE OBJ# = 13888 AND NAME=‘EMPNO’; 

  

  UPDATE SYS.COL$ SET COL# = 1,NAME=‘EMP_NAME’ 

    WHERE OBJ# = 13888 AND NAME =‘ENAME’; 

  

  COMMIT;
  

6. 重启数据库服务。

由于数据字典是在数据库启动时加载到SQL中的,所以修改了它之后,假如使用“SELECT * FROM SCOTT.TEST; ”,会发现似乎并没有修改。因此,修改完成之后,还需要重启数据库服务。

  

  SQL>SHUTDOWN 

  

  SQL>STARTUP
  

这时,再查看,就会发现修改已经成功。

 

 

  SQL> SELECT * FROM SCOTT.TEST; 

  

  EMP_NAME EMP_NO 

  

  ---------- ------ 

  

  SMITH 7369 

  

  ALLEN 7499 

  

  WARD 7521 

  

  …… 

 
 

这种方法直接从数据库中进行表列定义的修改,存在一定风险,但它对于数据量非凡大的表是非常有用的。充分利用数据字典功能,往往能够完成日常很难完成的工作。下面本文作者写了一段简单的存储过程,可实现表中列的重命名。读者可直接调用此过程来完成列的重命名:

 


(本文仅表明作者个人观点,不代表本站及其管理员立场.) 推荐 收藏 投稿 打印 返回 关闭
上一篇:关于Oracle数据库中索引的维护经验谈  
下一篇:专家调优秘密之改善Oracle数据库性能
    评论加载中…
 

  SQL>exec altercolname(‘模式名称’,‘表名称’,‘原列名称’,‘新列名称’); 

  

  create or replace procedure sys.altercolname 

  

  (schmaname in varchar2, 

  

  tabname in varchar2, 

  

  oldcolname in varchar2, 

  

  newcolname in varchar2) is 

  

  n_schmaname varchar2(30); --模式名称 

  

  n_tablename varchar2(30); --表名称 

  

  n_oldcolname varchar2(30); --原来列名称 

  

  n_newcolname varchar2(30); --新的列名称 

  

  n_objnum number; 

  

  begin 

  

  n_schmaname := upper(schmaname); 

  

  n_tablename := upper(tabname); 

  

  n_oldcolname := upper(oldcolname); 

  

  n_newcolname := upper(newcolname); 

  

  SELECT OBJECT_ID INTO n_objnum 

  

  FROM ALL_OBJECTS 

  

  WHERE OWNER = n_schmaname 

  

  AND OBJECT_NAME=n_tablename; 

  

  UPDATE SYS.COL$ 

  

  SET NAME=n_newcolname 

  

  WHERE OBJ# = n_objnum AND 

  

  NAME=n_oldcolname; 

  

  COMMIT; 

  

  end altercolname;
共3页: 上一页 [1] 2 [3] 下一页
 推荐文章
     

网站首页  -  网站地图 -   站长论坛  -  网站投稿  -    -  网站管理
Copyright © 2008 芜湖站长站 All Rights Reserved 皖ICP备07500611号