我可以通过使用另一个表的约束来更改一个表的约束吗?

时间:2019-05-29 07:57:06

标签: sql oracle indexing triggers constraints

我不得不放下一张桌子,然后使用档案重新制作它。在此过程中,我丢失了表的约束(如主键之类的东西),触发器,索引等。但是,我在不同的数据库上有相同的表,它具有所有适当的约束。

我尝试手动添加约束,触发器和索引,但是数量太多。

我想知道我是否可以做类似的事情:

.disabled {
    pointer-events: none;
    opacity: 0.6;
}

2 个答案:

答案 0 :(得分:2)

不,那是行不通的。

您可以做的是使用某些GUI(例如TOAD或SQL Developer),找到表t73,看看其 Script 包含所有命令({{1} },CREATE TABLECREATE INDEX,...),然后复制/粘贴所需的内容,然后在当前数据库中执行它们。

那是快速

如果您想正确地做到这一点(就像我一样,假装知道自己在做什么),请查看CREATE CONSTRAINT并从数据库中提取这些命令。

最终结果应该相同。

答案 1 :(得分:1)

这是下面的示例,您如何使用dbms_metadata.get_ddl oracle软件包

create table EX_EMPLOYEe ( id number(5) null, name varchar2(100))
/
alter table ex_Employee add constraint PK_EX_EMPLOYEE primary key (id)
/
alter table ex_Employee add constraint FK_EX_EMPLOYEE foreign key (id)
references ex_Employee1 (id)
/
create table EX_EMPLOYEe1 ( id number(5) null, name varchar2(100))
/
alter table ex_Employee1 add constraint PK_EX_EMPLOYEE1 primary key (id)

alter table SYS_PARAM_KEY_LABEL
  add constraint FK1_SYS_PARAM_KEY_LABEL foreign key (KEY_GROUP_ID)
  references SYS_PARAM_KEY_GROUP (KEY_GROUP_ID);
/
CREATE INDEX IDX_EX_EMPLOYEe on ex_employee(name)
/
  Create or replace PROCEDURE P_EX_EMPLOYEe as
  begin
  select id from ex_employee where rownum=1;
  end;
/
CREATE OR REPLACE TRIGGER TRG_EX_EMPLOYEe AFTER DELETE ON EX_EMPLOYEe
FOR EACH ROW 
BEGIN
  DELETE FROM ex_employee1 WHERE id = :OLD.ID;
END;
/
select to_char( dbms_metadata.get_ddl('CONSTRAINT', c.constraint_name)) from user_constraints c where table_name='EX_EMPLOYEE' 
and c.constraint_type='P'
union
select to_char( dbms_metadata.get_ddl('REF_CONSTRAINT', c.constraint_name)) from user_constraints c where table_name='EX_EMPLOYEE' 
and c.constraint_type='R'
union
select to_char( dbms_metadata.get_ddl('INDEX', c.index_name)) from user_indexes c where table_name='EX_EMPLOYEE'
union
select to_char( dbms_metadata.get_ddl('PROCEDURE', d.name)) from user_dependencies d where d.referenced_name='EX_EMPLOYEE'
and d.type='PROCEDURE'
union
select to_char( dbms_metadata.get_ddl('TRIGGER', d.name)) from user_dependencies d where d.referenced_name='EX_EMPLOYEE'
and d.type='TRIGGER'