可以使用以下视图之一访问有关 Oracle 数据库中列的所有元数据。
用户选项卡列 http://download.oracle.com/docs/cd/E11882_01/server.112/e17110/statviews_5465.htm#REFRN26276; -- 对于用户拥有的所有表
所有选项卡列 http://download.oracle.com/docs/cd/E11882_01/server.112/e17110/statviews_2102.htm#I1020276; -- 对于用户可访问的所有表
dba_tab_cols http://download.oracle.com/docs/cd/E11882_01/server.112/e17110/statviews_5043.htm#REFRN23276; -- 对于数据库中的所有表。
因此,如果您正在 SCOTT.EMP 表中查找类似 ADD_TMS 的列,并且仅在该列不存在时才添加该列,则 PL/SQL 代码将遵循这些行。
DECLARE
v_column_exists number := 0;
BEGIN
Select count(*) into v_column_exists
from user_tab_cols
where upper(column_name) = 'ADD_TMS'
and upper(table_name) = 'EMP';
--and owner = 'SCOTT --*might be required if you are using all/dba views
if (v_column_exists = 0) then
execute immediate 'alter table emp add (ADD_TMS date)';
end if;
end;
/
如果您计划将其作为脚本(不是过程的一部分)运行,最简单的方法是在脚本中包含 alter 命令并查看脚本末尾的错误,假设您没有 Begin-End剧本..
如果你有 file1.sql
alter table t1 add col1 date;
alter table t1 add col2 date;
alter table t1 add col3 date;
并且 col2 存在,当脚本运行时,其他两列将添加到表中,并且日志将显示错误说“col2”已经存在,所以你应该没问题。