在oracle中,可以使用“ALTER TABLE ADD”語句來向表中添加一列或多列,語法“ALTER TABLE table_name ADD column_name data_type constraint;”。
本教程操作環(huán)境:Windows7系統(tǒng)、Oracle 11g版、Dell G3電腦。
在oracle中,可以使用“ALTER TABLE ADD
”語句來向表中添加一列或多列。
要將新列添加到表中,請(qǐng)按如下所示使用ALTER TABLE
語句:
ALTER TABLE table_name ADD column_name data_type constraint;
在上面這個(gè)語句中,
- 首先,在
ALTER TABLE
子句之后指定要添加新列的表的名稱。 - 其次,指定列名,數(shù)據(jù)類型及其約束。
請(qǐng)注意,不能添加表中已經(jīng)存在的列; 這樣做會(huì)導(dǎo)致錯(cuò)誤。 另外,
ALTER TABLE ADD
列語句在表的末尾添加新列。 Oracle沒有提供直接的方法來允許您像其他數(shù)據(jù)庫系統(tǒng)(如MySQL)那樣指定新列的位置。
如果想要添加多個(gè)列,請(qǐng)使用以下語法:
ALTER TABLE table_name ADD ( column_name_1 data_type constraint, column_name_2 data_type constraint, ... );
在這個(gè)語法中,用逗號(hào)分隔兩列。
Oracle ALTER TABLE ADD列的例子
下面來創(chuàng)建一個(gè)名為members
的表。參考以下SQL語句 –
-- 12c語法 CREATE TABLE members( member_id NUMBER GENERATED BY DEFAULT AS IDENTITY, first_name VARCHAR2(50), last_name VARCHAR2(50), PRIMARY KEY(member_id) );
以下語句將一個(gè)名為birth_date
的新列添加到members
表中:
ALTER TABLE members ADD birth_date DATE NOT NULL;
在這個(gè)例子中,birth_date
列是一個(gè)DATE
列,它不接受null
。
假設(shè)想記錄一行的創(chuàng)建和更新的時(shí)間。那么可以再添加兩列created_at
和updated_at
,如下所示:
ALTER TABLE members ADD( created_at TIMESTAMP WITH TIME ZONE NOT NULL, updated_at TIMESTAMP WITH TIME ZONE NOT NULL );
created_at
和updated_at
列的數(shù)據(jù)類型是TIMESTAMP WITH TIME ZONE
。 這些列也不接受null
。
要檢查表中是否存在列,可以從user_tab_cols
視圖查詢數(shù)據(jù)。 例如,以下語句將檢查members
表是否具有first_name
列。
SELECT COUNT(*) FROM user_tab_cols WHERE column_name = 'FIRST_NAME' AND table_name = 'MEMBERS';
當(dāng)想在添加表之前檢查列中是否存在列時(shí),此查詢就派上用場(chǎng)了。
例如,下面的PL/SQL塊在添加之前檢查members
表是否有effective_date
列。
SET SERVEROUTPUT ON SIZE 1000000 DECLARE v_col_exists NUMBER BEGIN SELECT count(*) INTO v_col_exists FROM user_tab_cols WHERE column_name = 'EFFECTIVE_DATE' AND table_name = 'MEMBERS'; IF (v_col_exists = 0) THEN EXECUTE IMMEDIATE 'ALTER TABLE members ADD effective_date DATE'; ELSE DBMS_OUTPUT.PUT_LINE('The column effective_date already exists'); END IF; END; /
如果第一次執(zhí)行該塊,那么effective_date
列將被添加到members
表的末尾。 但是,一旦從第二次執(zhí)行它,將看到以下消息:
The column effective_date already exists
這與上面編寫的程序的預(yù)期一致。
推薦教程:《Oracle教程》