【正文】
s EMPNO NUMBER(4) Y ENAME VARCHAR2(10) Y ,并把ENAME列更名為EMP_NAME,EMPNO改為EMP_NO。 2.查詢表中列的實(shí)際存儲(chǔ)位置或表。 SQLSET LONG 9999 由于TEXT列是LONG類型,只有“SET”之后才能完全顯示。 SQLSELECT TEXT FROM ALL_VIEWS WHERE VIEW_NAME = ‘USER_TAB_COLUMNS’。 數(shù)據(jù)字典視圖USER_TAB_COLUMNS中存儲(chǔ)有表列的定義信息,從該語(yǔ)句的查詢結(jié)果可以看出,$中的,即如果修改表中列的定義,$表中修改。 3.。 SQL SELECT * FROM ALL_OBJECTS WHERE OWNER =‘SCOTT’ AND OBJECT_NAME=‘TEST’。 4.,$檢索出表中列的定義信息。 SQL SELECT OBJ,COL,NAME FROM $ WHERE OBJ =13888。 OBJ COL NAME 13888 1 EMPNO 13888 2 ENAME 5.使用Update語(yǔ)句來(lái)進(jìn)行修改。 UPDATE $ SET COL = 2,NAME=‘EMP_NO’ WHERE OBJ = 13888 AND NAME=‘EMPNO’。 UPDATE $ SET COL = 1,NAME=‘EMP_NAME’ WHERE OBJ = 13888 AND NAME =‘ENAME’。 COMMIT。 6. 重啟數(shù)據(jù)庫(kù)服務(wù)。 由于數(shù)據(jù)字典是在數(shù)據(jù)庫(kù)啟動(dòng)時(shí)加載到SQL中的,所以修改了它之后,如果使用“SELECT * FROM 。 ”,會(huì)發(fā)現(xiàn)好像并沒(méi)有修改。因此,修改完成之后,還需要重啟數(shù)據(jù)庫(kù)服務(wù)。 SQLSHUTDOWN SQLSTARTUP 這時(shí),再查看,就會(huì)發(fā)現(xiàn)修改已經(jīng)成功。 SQL SELECT * FROM 。 EMP_NAME EMP_NO SMITH 7369 ALLEN 7499 WARD 7521 …… 這種方法直接從數(shù)據(jù)庫(kù)中進(jìn)行表列定義的修改,存在一定風(fēng)險(xiǎn),但它對(duì)于數(shù)據(jù)量特別大的表是非常有用的。充分利用數(shù)據(jù)字典功能,往往能夠完成日常很難完成的工作。下面筆者寫了一段簡(jiǎn)單的存儲(chǔ)過(guò)程,可實(shí)現(xiàn)表中列的重命名。讀者可直接調(diào)用此過(guò)程來(lái)完成列的重命名: SQLexec altercolname(‘模式名稱’,‘表名稱’,‘原列名稱’,‘新列名稱’)。 create or replace procedure (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)。 原來(lái)列名稱 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 $ SET NAME=n_newcolname WHERE OBJ = n_objnum AND NAME=n_oldcolname。 COMMIT。 end altercolname。