Типы таблиц в DB2 - PullRequest
       1

Типы таблиц в DB2

2 голосов
/ 28 июня 2011

При написании программы, которая связывает Java и DB2 через драйвер JDBC, я попытался написать программу, которая бы извлекала все данные (все записи, содержащиеся во всех таблицах) в заданной базе данных.Когда я запустил программу, я обнаружил, что она в основном работает.Однако было несколько таблиц, из которых он не собирал данные.Я получил доступ к этим таблицам из командного редактора IBM и обнаружил, что они содержат данные.Я запустил

SELECT * FROM SYSCAT.COLUMNS WHERE TABNAME = 'Table'

для базы данных и обнаружил, что в этих таблицах нет записей столбцов в таблице SYSCAT.COLUMNS.,Полагая, что я неправильно написал имя таблицы, я запустил

SELECT * FROM SYSCAT.COLUMNS

для базы данных и вручную искал таблицу под именем TABNAME.Я не мог найти это.Когда я запустил

SELECT * FROM SYSCAT.TABLES

, я нашел таблицу в списке доступных таблиц.Однако в SYSCAT.TABLES я также обнаружил, что ни в одной из таблиц ТИПА 'A' нет записей в SYSCAT.COLUMNS.Мне было интересно, в чем причина этого для IBM и как я могу узнать, как называются имена полей для этих конкретных типов таблиц.

TL; DR Как получить имена столбцов для DB2 без использования SYSCAT.COLUMNSчерез стандартный запрос SQL к базе данных DB2?

1 Ответ

6 голосов
/ 28 июня 2011

Это имеет смысл, поскольку таблицы типа 'A' являются псевдонимами для другой таблицы.

Если вы хотите найти столбцы для таблицы типа 'A', посмотрите в столбцах BASE_TABSCHEMA и BASE_TABNAME, чтобынайти имя схемы и таблицы, на которые ссылается псевдоним.Если вы посмотрите на эту таблицу, она будет в syscolumns.

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

SELECT * FROM SYSCAT.COLUMNS WHERE TABNAME=
(SELECT BASE_TABNAME FROM SYSCAT.TABLES WHERE TABNAME = 'Table')

Кстати, документация DB2 содержит полную ссылку насистемный каталог.Здесь .

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