当向表中载入数据的时候,有时会不得不解除对表的约束。假定表已经被删减过或有损坏了, 更有可能的是表存有如外部关键字之类的引用完整性约束,这时数据库不会允许向表中插入不在其它表中存在相关关系的数据,如果引用列在其它的表中不存在的话,在最初装入数据的时候可能会不得不解除对表的约束。当然当载入成功以后,应该将这些约束恢复。
INPUT
SQL> SET ECHO OFF
SQL> SET FEEDBACK OFF
SQL> SET HEADING OFF
SQL> SPOOL DISABLE.SQL
SQL> SELECT 'ALTER TABLE ' || TABLE_NAME ||
2 'DISABLE CONSTRAINT ' || CONSTRAINT_NAME || ';'
3 FROM SYS.DBA_CONSTRAINTS
4 WHERE OWNER = 'RYAN'
5 /
OUTPUT
ALTER TABLE ACCT_PAY DISABLE CONSTRAINT FK_ACCT_ID;
ALTER TABLE ACCT_REC DISABLE CONSTRAINT FK_ACCT_ID;
ALTER TABLE CUSTOMERS DISABLE CONSTRAINT FK_CUSTOMER_ID;
ALTER TABLE HISTORY DISABLE CONSTRAINT FK_ACCT_ID;
ALTER TABLE INVOICES DISABLE CONSTRAINT FK_ACCT_ID;
ALTER TABLE ORDERS DISABLE CONSTRAINT FK_ACCT_ID;
这个对象已经生成了一系列的 ALTER TABLE 语句来解除所有为 RYAN 所拥有的表,在连接符末尾的分号是为了保证每个语句的完整。
INPUT/OUTPUT
SQL> SPOOL OFF
SQL> SET ECHO OFF
SQL> SET FEEDBACK ON
SQL> START DISABLE.SQL
Constraint Disabled.
Constraint Disabled.
Constraint Disabled.
Constraint Disabled.
Constraint Disabled.
Constraint Disabled.
注意在这里 ECHO 被设置为 OFF 也是说你在执行不会看到对应的语句 但是由于FEEDBACK 设置为 ON 所以你可以看到结果Constraint Disabled.如果 ECHO 和 FEEDBACK 都设置成 OFF 了,在执行时将什么都不会显示,只是经过一段时间的暂停以后又回到了 SQL>的提示符下,现在你可以放心地载入你的数据而不必担心因为约束而导致的错误了。约束是好事但它在数据载入的时候会造成障碍也可以使用相同的思想来恢复对表的约束。
上一篇:微信小程序怎么实现模版渲染
下一篇:常见的SQL语句具体有哪些