Чтобы поместить DDL в блок PL / SQL, вам необходимо использовать динамический SQL.
Лично я бы проверил, существует ли сначала столбец, а затем выполнил DDL.Что-то вроде
DECLARE
l_cnt INTEGER;
BEGIN
SELECT COUNT(*)
INTO l_cnt
FROM dba_tab_cols
WHERE table_name = 'MY_TABLE'
AND owner = <<owner of table>>
AND column_name = 'COL_NAME';
IF( l_cnt = 0 )
THEN
EXECUTE IMMEDIATE 'ALTER TABLE my_table ADD( col_name VARCHAR2(100) )';
ELSE
EXECUTE IMMEDIATE 'ALTER TABLE my_table MODIFY( col_name VARCHAR2(100) )';
END IF;
END;
Если у вас нет доступа к DBA_TAB_COLS
, вы также можете использовать ALL_TAB_COLS
или USER_TAB_COLS
в зависимости от того, в какой схеме находится таблица и какие у вас есть права на нее..