заполнить тестовые данные в базу данных оракула - PullRequest
1 голос
/ 03 мая 2011

У меня есть схема базы данных Oracle с более сложным отношением внешнего ключа. Мне нужно заполнить тестовые данные для всех таблиц. Из-за ограничений внешнего ключа мне трудно найти иерархию таблиц. пакет или метод для этого ..

Заранее спасибо

Ответы [ 2 ]

6 голосов
/ 03 мая 2011

Было бы полезно, если бы вы сообщили нам, какую форму вы хотите получить. Возможно, вы захотите начать с примера Фрэнка Кулаша иерархического запроса к DBA_CONSTRAINTS таблице , чтобы показать путь.

Если вы ищете способ определить порядок загрузки таблиц, это идентично вопросу, заданному в dba.stackexchange (невозможно пометить этот вопрос как дубликат, поскольку администратор базы данных все еще в бета-версии). Что-то вроде

WITH    constraint_tree AS
(
    SELECT DISTINCT
        a.table_name    AS table_name
    ,   b.table_name    AS parent_table_name
    FROM        dba_constraints a
    LEFT OUTER JOIN dba_constraints b
    ON      a.r_constraint_name = b.constraint_name
    AND     a.owner         = b.owner
    WHERE       a.owner = 'SCOTT'
)
SELECT table_name, lvl
  FROM (
    SELECT a.*,
           rank() over (partition by table_name order by lvl desc) rnk
      FROM (
        SELECT  table_name, level lvl
          FROM  constraint_tree
         START WITH parent_table_name   IS NULL
       CONNECT BY NOCYCLE parent_table_name = PRIOR table_name
      ) a 
    ) b
 WHERE rnk = 1
 ORDER BY lvl, table_name
/

выдаст вам таблицы в порядке их загрузки (при условии, что в данных нет циклов). Если вы хотите загружать параллельно, все таблицы с одинаковым LVL могут быть загружены одновременно.

2 голосов
/ 04 мая 2011

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

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

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