Как конвертировать этот скрипт t-sql? - PullRequest
1 голос
/ 15 мая 2009

Я не знаком с Oracle, и мне нужен эквивалент моего сценария для Oracle.

Сценарий:


SELECT  COL_NAME(parent_object_id, parent_column_id) AS ForigneKeyField,
        COL_NAME(referenced_object_id, referenced_column_id) AS PrimaryKeyField,
        OBJECT_NAME(referenced_object_id) AS PrimaryTable
FROM    sys.foreign_key_columns
WHERE   parent_object_id = OBJECT_ID(@name)

1 Ответ

3 голосов
/ 15 мая 2009

Я незнаком с t-sql, но я знаком с Oracle, поэтому:

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

В Oracle эта информация хранится в представлениях словаря данных ALL_CONSTRAINTS и ALL_CONS_COLUMNS (или DBA_CONSTRAINTS / DBA_CONS_COLUMNS or USER_CONSTRAINTS / USER_CONS_COLUMNS, в зависимости от объема вашего запроса). Я бы запустил такой запрос:

SELECT fc.constraint_name   AS ForeignConstraint
      ,fc.r_constraint_name AS ReferencedConstraint
      ,fcc.column_name      AS ForeignKeyField
      ,rcc.column_name      AS ReferencedKeyField
      ,rc.table_name        AS ReferencedTable
FROM   sys.all_constraints  fc
      ,sys.all_constraints  rc
      ,sys.all_cons_columns fcc
      ,sys.all_cons_columns rcc
WHERE  fc.table_name        = :name
AND    fc.constraint_type   = 'R'
AND    fc.r_constraint_name = rc.constraint_name
AND    fc.constraint_name   = fcc.constraint_name
AND    rc.constraint_name   = rcc.constraint_name
AND    fcc.position         = rcc.position
ORDER BY fc.constraint_name, fcc.position;

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

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