我不得不放下一张桌子,然后使用档案重新制作它。在此过程中,我丢失了表的约束(如主键之类的东西),触发器,索引等。但是,我在不同的数据库上有相同的表,它具有所有适当的约束。
我尝试手动添加约束,触发器和索引,但是数量太多。
我想知道我是否可以做类似的事情:
.disabled {
pointer-events: none;
opacity: 0.6;
}
答案 0 :(得分:2)
不,那是行不通的。
您可以做的是使用某些GUI(例如TOAD或SQL Developer),找到表t73
,看看其 Script 包含所有命令({{1} },CREATE TABLE
,CREATE 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'