2015-10-15 91 views
0

我正在负责将数据复制到新数据库的团队。列出数据字典中的主键

对于我们需要将模式中的每个主键复制到脚本的脚本。现在,访问每张桌子并获得PK花费时间并不困难。

有没有办法从datadictionary动态列出所有的PK来加速这个过程?

+0

你是什么意思“复制模式中的每个主键到脚本?”我没有遵循你想要做的事情。你能分享一下你的代码吗? – Siyual

+0

我其实不能分享这个脚本。我会尽力尽力解释。从本质上讲,我处于这样的位置,我必须将每个表中的每个主键复制并粘贴到我们正在运行的脚本中,以便将我们的开发数据库复制到生产数据库。而不是手动查看每个表和它的主键我只想列出我们的开发数据库中的所有主键(可能来自数据字典),以便我们可以轻松地将它们插入到我们的脚本中。我很抱歉,这个描述不够。这很糟糕,我不能分享剧本。这有帮助吗? – Jules

+0

有点 - 我想更好的问题是,你想用数据做什么?你是否将记录从开发环境迁移到生产?如果是这样,您可能需要考虑使用专为此设计的工具,如SSIS。 – Siyual

回答

1

我认为这可能接近你正在寻找的东西。如果您想从DBA_CONSTRAINTSDBA_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中尝试。 –