一、使用ALTER TABLE語句增加表字段
ALTER TABLE語句可以用來修改表結構,包括增加、刪除、修改字段以及修改表的約束等。如果要增加一個字段,可以使用下列ALTER TABLE語句:
ALTER TABLE 表名 ADD (字段名 字段類型);
例如:ALTER TABLE emp ADD(emp_age NUMBER(3));
其中,表名為需要增加字段的表名,字段名為需要增加的字段名,字段類型為需要增加的字段類型。可以同時增加多個字段,只需要用逗號隔開即可。
注意:增加字段時,如果表中已經有了相同名字的字段,SQL語句執行會失敗。
二、使用CREATE TABLE AS語句增加表字段
CREATE TABLE AS語句可以通過SELECT語句的結果來創建新的表格。可以利用該語句來增加字段,例如:
CREATE TABLE new_emp AS
SELECT emp_id,emp_name,emp_salary,emp_age,1 new_field
FROM emp;
該語句將根據emp表的結果創建新表new_emp。其中,1代表新加的字段的默認值,可以在語句中修改為需要的值。
三、使用DBMS_REDEFINITION包增加表字段
DBMS_REDEFINITION包提供了一種能夠修改字段大小或者增加/刪除字段的并行方法,可以執行在線重定義表。其主要步驟為:
1. 使用DBMS_REDEFINITION.START_REDEF_TABLE函數開始重定義表操作。
BEGIN
DBMS_REDEFINITION.START_REDEF_TABLE(
uname => 'SCOTT',
orig_table => 'EMP',
int_table => 'EMP_INT',
col_mapping => '');
END;
2. 使用DBMS_REDEFINITION.COPY_TABLE_DEPENDENTS函數將索引、約束等依賴重定義操作所需的依賴復制到臨時表中。
BEGIN
DBMS_REDEFINITION.COPY_TABLE_DEPENDENTS(
uname => 'SCOTT',
orig_table => 'EMP',
int_table => 'EMP_INT',
copy_indexes => DBMS_REDEFINITION.CONS_ORIG_PARAMS,
copy_triggers => TRUE,
copy_constraints => TRUE,
copy_privileges => TRUE,
ignore_errors => FALSE);
END;
3. 使用DBMS_REDEFINITION.FINISH_REDEF_TABLE函數結束重定義表操作,這個函數完成如下操作:重命名原始表,將所有表的依賴性關系轉移到重新定義的表中,然后將重新定義的表重命名為原始表的名稱。
BEGIN
DBMS_REDEFINITION.FINISH_REDEF_TABLE(
uname => 'SCOTT',
orig_table => 'EMP',
int_table => 'EMP_INT');
END;
四、使用CREATE AS SELECT語句增加表字段
CREATE AS SELECT語句可以用SELECT語句生成的結果集創建表格。在創建新表時,可以增加新的字段:
CREATE TABLE new_emp2 AS
SELECT emp_id,emp_name,emp_salary,emp_age,1 new_field
FROM emp;
ALTER TABLE new_emp2 ADD new_field2 varchar2(255);
該代碼會先根據emp表的結果創建新表new_emp2,然后利用ALTER TABLE語句增加新字段new_field2。可以在新表前面使用AS關鍵字,為新表命名。