Еще один способ сделать это с обработкой ошибок:
declare v_sql varchar(1000);
declare col_missing integer default 0;
declare col_does_not_exist condition for sqlstate '42703';
declare continue handler for col_does_not_exist set col_missing = 1;
set v_sql = 'select table.foo from table';
execute immediate v_sql;
if col_missing = 1 then
--Do something if column foo doesn't exist.
end if;
Этот метод будет работать с таблицами сеансов, и вы также можете использовать его для объекта, даже если вы не знаете, является ли он таблицей, представлением, псевдонимом и т. Д.
Важно указать table.foo
, а не просто имя столбца, так как в противном случае существование другого объекта (например, переменной) с именем foo
нарушит проверку.
Этот обработчик продолжения будет маскировать любые другие ошибки для столбцов, отсутствующих в области, поэтому лучше ограничить область только тем тестом, который вы хотите выполнить.