DB2: Как узнать, присутствует ли столбец в таблице или списке таблиц? - PullRequest
6 голосов
/ 05 января 2012

Я использую базу данных DB2.Каким будет SQL-запрос, чтобы узнать, существует ли столбец в таблице или списке таблиц?

например

if "column_name" is found in "table name" or [list of table names]

return true or the name of tables that have that column.

Большое спасибо.

Ответы [ 3 ]

8 голосов
/ 05 января 2012

Протестировано в DB2 z / OS 9.1 и LUW 9.7:

SELECT STRIP(TBCREATOR) || '.' || STRIP(TBNAME)
FROM SYSIBM.SYSCOLUMNS 
WHERE NAME = 'your_col'
  AND TBNAME IN ('list', 'of', 'tables')

Если вы хотите получить результаты только из определенной схемы, вы можете добавить AND TBCREATOR = 'your_schema' в конец запроса.

5 голосов
/ 05 января 2012

Использование SYSCAT.COLUMNS просмотр каталога :

SELECT TABNAME
FROM SYSCAT.COLUMNS
WHERE 
    TABNAME IN ('table name 1', 'table name 2') AND 
    COLNAME = 'column_name';
0 голосов
/ 30 июня 2014

Еще один способ сделать это с обработкой ошибок:

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 нарушит проверку.

Этот обработчик продолжения будет маскировать любые другие ошибки для столбцов, отсутствующих в области, поэтому лучше ограничить область только тем тестом, который вы хотите выполнить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...