首發微信公眾號:SQL資料庫運維
原文鏈接:https://mp.weixin.qq.com/s?__biz=MzI1NTQyNzg3MQ==&mid=2247485212&idx=1&sn=450e9e94fa709b5eeff0de371c62072b&chksm=ea37536cdd40da7a94e165ce4b4c6e70fb1360d51bed4b3566eee438b587fa231315d0a5a5b3&token=1491694448&lang=zh_CN#rd
之前總結了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,獲取學習資料,
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/539970.html
標籤:其他
