如何从数据库中获取所有主键

时间:2014-04-07 14:08:24

标签: oracle

我正在搜索查询或我可以导出数据库中所有主键的方式 我有超过1000多个主键。

我可以用这种方式

select ' alter table '''||tab1||''' add constraint '''||constraint_name|||''' primary key values ( '''||columns||''' ') from user_cons_tables

但上面的问题是我无法添加更多的一列

2 个答案:

答案 0 :(得分:3)

如果您使用的是11g且可以使用listagg功能,则可以使用该功能。我不知道你的例子中user_cons_tables是什么,但我认为这就是你想要的:

select ' alter table "' || uc.table_name || '" add constraint "'
  ||uc.constraint_name||'" primary key ('||
    listagg('"' || column_name || '"', ',') within group (order by ucc.position)
  || ')' as alter_statement
from user_constraints uc
join user_cons_columns ucc on ucc.constraint_name = uc.constraint_name
where uc.constraint_type = 'P'
group by uc.table_name, uc.constraint_name;

SQL Fiddle

但为什么要推出自己的?您可以改为使用dbms_metadata

select dbms_metadata.get_ddl('CONSTRAINT', uc.constraint_name)
from user_constraints uc 
where uc.constraint_type = 'P';

SQL Fiddle

您可能需要进行一些转换以移除存储空间等,正如我在小提琴中所示。

答案 1 :(得分:3)

使用DBMS_METADATA包:

SQL> col x format a100
SQL> select dbms_metadata.get_ddl('CONSTRAINT', constraint_name) x
  2  from user_constraints where constraint_type = 'P' and rownum <= 2
  3  /

X                                                                               
--------------------------------------------------------------------------------

  ALTER TABLE "SCOTT"."TEST_TAB" ADD PRIMARY KEY ("X")                            
  USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS             
  TABLESPACE "USERS"  ENABLE                                              


  ALTER TABLE "SCOTT"."T" ADD PRIMARY KEY ("ID", "NAME")                                                                             
  USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS             
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645         
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1                                   
  BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)             
  TABLESPACE "USERS"  ENABLE                                              
相关问题