首發微信公眾號:SQL資料庫運維 原文鏈接:https://mp.weixin.qq.com/s?__biz=MzI1NTQyNzg3MQ==&mid=2247485212&idx=1&sn=450e9e94fa709b5eeff0de371c62072b&chksm=ea37536cdd40da7 ...
首發微信公眾號:SQL資料庫運維
之前總結了ALTER TABLE的五種用法:Oracle中ALTER TABLE的五種用法(點擊文字可跳轉),現在以實例的方式詳細講解下ALTER TABLE ADD語句向表中添加一列或多列的用法。
語法
--在 ADD 之後指定要添加新列的名稱,數據類型及其約束 --添加一列 ALTER TABLE table_name ADD column_name data_type constraint; --添加多列,在這個語法中,用逗號分隔兩列 ALTER TABLE table_name ADD ( column_name_1 data_type constraint, column_name_2 data_type constraint, ... );
首先創建一個測試表,腳本如下:
--我們本次使用的11g建立數據表語法(無自增) CREATE TABLE TEST( ID INT, NAME VARCHAR2(50), SEX VARCHAR2(50), PRIMARY KEY(ID) ); -- 12c語法,設置ID自增,在12c以下版本會報錯 CREATE TABLE TEST( ID NUMBER GENERATED BY DEFAULT AS IDENTITY, NAME VARCHAR2(50), SEX VARCHAR2(50), PRIMARY KEY(ID ) );
以下語句將一個名為birth的新列添加到TEST表中,且不允許為空值:
ALTER TABLE TEST ADD birth DATE NOT NULL;
假如我們想記錄一行的創建和更新的時間。那麼可以再添加兩列created_at和updated_at,如下所示:
ALTER TABLE TEST ADD( created_at TIMESTAMP WITH TIME ZONE NOT NULL, updated_at TIMESTAMP WITH TIME ZONE NOT NULL );
要檢查表中是否存在列,可以從user_tab_cols視圖查詢數據。例如,以下語句將檢查TEST表是否具有NAME 列。
SELECT COUNT(*) FROM user_tab_cols WHERE column_name = 'NAME' AND table_name = 'TEST';
當想在添加表之前檢查列中是否存在列時,此查詢就派上用場了。
例如,下麵的PL/SQL塊在使用PLSQL Developer工具添加之前檢查TEST表是否有ADD_TMS列,如果有則輸出“表中已存在要添加的列”,如果沒有則直接添加。
--需要註意的是預設pl/sql不輸出,需要開啟下, --開啟步驟:首選項——>Oracle——>輸出——>勾選已開啟 --聲明變數存儲要查詢的表中的列是否存在 DECLARE v_column_exists number; BEGIN --從系統表中查詢表中的列是否存在 Select count(*) into v_column_exists from user_tab_cols where upper(column_name) = 'ADD_TMS' and upper(table_name) = 'TEST'; --如果不存在,使用快速執行語句添加ADD_TMS列 if (v_column_exists = 0) then execute immediate 'alter table TEST add (ADD_TMS date)'; ELSE dbms_output.put_line('表中已存在要添加的列'); end if; end; --oracle中斜杠(/)的含義斜杠就是讓伺服器執行前面所寫的sql腳本 /
打開微信搜索“SQL資料庫運維”,點擊關註“SQL資料庫運維”,後臺或瀏覽至公眾號文章底部點擊“發消息”回覆關鍵字:進群,帶你進入高手如雲的技術交流群。後臺回覆關鍵字:SQL,獲取學習資料。