国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 開(kāi)發(fā) > 綜合 > 正文

在數(shù)據(jù)字典中直接修改表列的名稱和順序

2024-07-21 02:41:11
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
按照關(guān)系數(shù)據(jù)庫(kù)的理論,行與列都是無(wú)序的,但在實(shí)際應(yīng)用中有時(shí)需要確定列的順序。但在Oracle中,一旦表定義好,再想修改列的順序可不太輕易。 Oracle數(shù)據(jù)庫(kù)沒(méi)有提供直接修改表中列名稱的功能,但在實(shí)際使用時(shí)常需要修改表的列名和列順序,不得已有些Oracle的使用人員用重新創(chuàng)建一個(gè)新的具有正確列名和順序的數(shù)據(jù)庫(kù)表,再將舊表的數(shù)據(jù)轉(zhuǎn)儲(chǔ)進(jìn)來(lái),最后刪除舊表并將新表重命名為舊表的方法來(lái)完成此功能。此方法的最大問(wèn)題是要求有雙倍的存儲(chǔ)空間、較大的回滾段和較長(zhǎng)的時(shí)間,假如表中數(shù)據(jù)量較大,這項(xiàng)工作開(kāi)銷會(huì)很大。實(shí)際上我們可以從數(shù)據(jù)字典中直接修改表列的名稱和順序。下面是具體的實(shí)現(xiàn)步驟: 1.以internal用戶名登錄Oracle數(shù)據(jù)庫(kù),并創(chuàng)建一測(cè)試表。
SQL>CREATE TABLE SCOTT.TEST AS SELECT EMPNO,ENAME FROM SCOTT.EMP; SQL>DESC SCOTT.TEST Name Type Nullable Default Comments ------- ------------ ------- EMPNO NUMBER(4) Y ENAME VARCHAR2(10) Y
下面我們要把SCOTT.TEST表中EMPNO和ENAME兩列調(diào)換順序,并把ENAME列更名為EMP_NAME,EMPNO改為EMP_NO。 2.查詢表中列的實(shí)際存儲(chǔ)位置或表。 SQL>SET LONG 9999,由于TEXT列是LONG類型,只有“SET”之后才能完全顯示。 SQL>SELECT TEXT FROM ALL_VIEWS WHERE VIEW_NAME = ‘USER_TAB_COLUMNS’; 數(shù)據(jù)字典視圖USER_TAB_COLUMNS中存儲(chǔ)有表列的定義信息,從該語(yǔ)句的查詢結(jié)果可以看出,列定義信息是存儲(chǔ)在表SYS.COL$中的,即假如修改表中列的定義,應(yīng)該在SYS.COL$表中修改。 3.從數(shù)據(jù)字典視圖ALL_OBJECTS中查找對(duì)象SCOTT.TEST對(duì)象ID。 SQL> SELECT * FROM ALL_OBJECTS WHERE OWNER =‘SCOTT’ AND OBJECT_NAME=‘TEST’; 4.根據(jù)SCOTT.TEST對(duì)象的ID,從SYS.COL$檢索出表中列的定義信息。
SQL> SELECT OBJ#,COL#,NAME FROM SYS.COL$ WHERE OBJ# =13888; OBJ# COL# NAME ---------- ---------- ------- 13888 1 EMPNO 13888 2 ENAME
5.使用Update語(yǔ)句來(lái)進(jìn)行修改。
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. 重啟數(shù)據(jù)庫(kù)服務(wù)。 由于數(shù)據(jù)字典是在數(shù)據(jù)庫(kù)啟動(dòng)時(shí)加載到SQL中的,所以修改了它之后,假如使用“SELECT * FROM SCOTT.TEST; ”,會(huì)發(fā)現(xiàn)似乎并沒(méi)有修改。因此,修改完成之后,還需要重啟數(shù)據(jù)庫(kù)服務(wù)。
SQL>SHUTDOWN SQL>STARTUP
這時(shí),再查看,就會(huì)發(fā)現(xiàn)修改已經(jīng)成功。
SQL> SELECT * FROM SCOTT.TEST; EMP_NAME EMP_NO ---------- ------ SMITH 7369 ALLEN 7499 WARD 7521 ……
這種方法直接從數(shù)據(jù)庫(kù)中進(jìn)行表列定義的修改,存在一定風(fēng)險(xiǎn),但它對(duì)于數(shù)據(jù)量非凡大的表是非常有用的。充分利用數(shù)據(jù)字典功能,往往能夠完成日常很難完成的工作。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 靖远县| 霍林郭勒市| 峨边| 九江县| 通山县| 台中市| 日喀则市| 长沙市| 徐水县| 合作市| 海林市| 咸丰县| 京山县| 上林县| 兰州市| 陇西县| 甘德县| 大厂| 额敏县| 长乐市| 辽中县| 江山市| 盐源县| 义乌市| 许昌县| 和政县| 五峰| 曲阜市| 阿克苏市| 柘城县| 鹤岗市| 景德镇市| 额尔古纳市| 南宫市| 镇原县| 如东县| 云霄县| 宜宾县| 屏山县| 迁西县| 合作市|