2015-10-15 3 views
0

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

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

Есть ли способ динамически перечислить все PK из datadictionary, чтобы ускорить этот процесс?

+0

Что вы подразумеваете под "копией каждого первичного ключа в схеме на скрипты?" Я не слежу за тем, что вы пытаетесь сделать. Можете ли вы поделиться своим кодом? – Siyual

+0

На самом деле я не могу поделиться этим скриптом. Я постараюсь объяснить как можно лучше. По сути, я в такой ситуации, когда мне придется копировать и проезжать каждый первичный ключ из каждой таблицы в скрипт, который мы запускаем, который реплицирует нашу базу данных dev в производственную базу данных. Вместо этого вручную глядя на каждую таблицу, и это первичный ключ, я просто хотел бы перечислить все первичные ключи в нашей базе данных dev (возможно, из словаря данных), поэтому я могу легко вставить их в наш скрипт. Мне жаль, что это недостаточно описательно. Это отстой, что я не могу поделиться сценарием. Было ли это полезно вообще? – Jules

+0

В некоторой степени - я думаю, лучший вопрос в том, что вы пытаетесь сделать с данными? Вы переносите записи из среды dev в производство? Если это так, вы можете захотеть использовать инструмент, предназначенный для этого, например, SSIS. – Siyual

ответ

1

Я думаю, что это может быть близко к тому, что вы ищете. Более подробную информацию вы можете включить, если хотите, от DBA_CONSTRAINTS или DBA_CONS_COLUMNS.

SELECT c.owner, 
     c.constraint_name, 
     c.table_name, 
     c.status, 
     LISTAGG (cc.column_name, ',') WITHIN GROUP (ORDER BY cc.position) key_columns 
FROM dba_constraints c 
     INNER JOIN dba_cons_columns cc 
     ON cc.owner = c.owner 
     AND cc.constraint_name = c.constraint_name 
     AND cc.table_name = c.table_name 
WHERE c.constraint_type = 'P' 
GROUP BY c.owner, 
     c.constraint_name, 
     c.table_name, 
     c.status 
+0

Спасибо за это. Я написал этот скрипт, но получаю пустую сетку данных любую идею, почему это может быть? Также спасибо Мэтью, вы помогли мне по предыдущим вопросам, и это ценно. – Jules

+0

Я не уверен. Попробуйте обычные методы отладки. То есть попробуйте широко открытый 'SELECT * FROM DBA_CONSTRAINTS' и посмотрите, получаете ли вы данные. Затем попробуйте добавить 'WHERE CONSTRAINT_TYPE = 'P'' и посмотреть, получаете ли вы данные и т. Д. Если вы имеете в виду, что в сетке данных есть строки, но все они пусты, попробуйте в SQL * Plus. –

Смежные вопросы