Дерби - ограничения - PullRequest
5 голосов
/ 10 мая 2009

На сервере Derby, как вы можете использовать информацию в системных таблицах схемы для создания оператора выбора для получения имен ограничений для каждой таблицы?

Ответы [ 2 ]

6 голосов
/ 10 мая 2009

Соответствующим руководством является Справочное руководство Derby . Доступно много версий: 10.13 был актуален в апреле 2017 года, но в мае 2009 года - 10.3.

Оригинальный ответ

SELECT c.constraintname, t.tablename
    FROM sysconstraints c, systables t
    WHERE c.tableid = t.tableid;

Поскольку достаточно недавние версии Derby требуют, чтобы таблицы системного каталога имели префикс sys. (10.13 цитируется kiwicomb123 в комментарии ), вы можете изменить запрос используйте также явную запись JOIN и используйте:

SELECT c.constraintname, t.tablename
  FROM sys.sysconstraints c
  JOIN sys.systables t
    ON c.tableid = t.tableid;

Вы можете добавить дополнительные столбцы - например, c.type, чтобы получить тип ограничения.

2 голосов
/ 21 января 2010
SELECT sc.schemaname, co.constraintname, t.tablename, cg.descriptor, t2.tablename, cg2.descriptor, f.deleterule, f.updaterule
FROM sys.sysconstraints co
JOIN sys.sysschemas sc ON co.schemaid = sc.schemaid
JOIN sys.systables t ON co.tableid = t.tableid
JOIN sys.sysforeignkeys f ON co.constraintid = f.constraintid
JOIN sys.sysconglomerates cg ON f.conglomerateid = cg.conglomerateid
JOIN sys.sysconstraints co2 ON f.keyconstraintid = co2.constraintid
JOIN sys.systables t2 ON co2.tableid = t2.tableid
JOIN sys.syskeys k ON co2.constraintid = k.constraintid
JOIN sys.sysconglomerates cg2 ON k.conglomerateid = cg2.conglomerateid
WHERE co.type = 'F' 
    and sc.schemaname = current schema    

две записи дескриптора содержат список номеров столбцов для каждой таблицы, например

BTREE (2,1)

где числа соответствуют номерам столбцов в таблице syscolumns соответствующей таблицы.

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

...