Ответ 1
Все метаданные о столбцах в базе данных Oracle доступны с помощью одного из следующих представлений.
user_tab_cols; - Для всех таблиц, принадлежащих пользователю
all_tab_cols; - Для всех таблиц, доступных пользователю
dba_tab_cols; - Для всех таблиц в базе данных.
Таким образом, если вы ищете столбец типа ADD_TMS в таблице SCOTT.EMP и добавляете столбец только в том случае, если он не существует, код 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" уже существует, так что вы должны быть в порядке.