友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!
富士康小说网 返回本书目录 加入书签 我的书架 我的书签 TXT全本下载 『收藏到我的浏览器』

SQL 21日自学通(V3.0)(PDF格式)-第48部分

快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部! 如果本书没有阅读完,想下次继续接着阅读,可使用上方 "收藏到我的浏览器" 功能 和 "加入书签" 功能!





行的时候看到 Grant  succeeded    没用多少力气  我们就为 BRANDON 赋予了 10 个表的访 



问权限  而且      你所做的工作可能会不只是 10 个表 



在载入数据时解除对数的约束 



    当你向表中载入数据的时候  有时你会不得不解除对表的约束                          假定你的表已经被删 



减过或有损坏了         更有可能的是你的表存有如外部关键字之类的引用完整性约束  这时数 



据库不会允许你向表中插入不在其它表中存在相关关系的数据                           如果引用列在其它的表中 



不存在的话       你在最初装入数据的时候你可能会不得不解除对表的约束                         当然    当载入成 



功以后  你应该将这些约束恢复 



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; 



分析 



                                                                         365 


…………………………………………………………Page 366……………………………………………………………

SQL 21  日自学通(V1。0)                                                  翻译人    笨猪 



这个对象已经生成了一系列的 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》 的提示符下 



    现在你可以放心地载入你的数据而不必担心因为约束而导致的错误了                                约束是好事 



但它在数据载入的时候会造成障碍                 你也可以使用相同的思想来恢复对表的约束 



一次创建多个同义字 



    另外一项令人烦躁和费力的工作是创建多个同义字                        不管是公共的还是私有的             只有 



DBA 可以创建共同的同义字  但是任何用户都可以创建私有的同义字 



    下边的例子是对所有为 RYAN 所拥有的表创建公共同义字 



INPUT 



    SQL》 SET ECHO OFF 



    SQL》 SET FEEDBACK OFF 



                                                                           366 


…………………………………………………………Page 367……………………………………………………………

SQL 21  日自学通(V1。0)                                                           翻译人    笨猪 



     SQL》 SET HEADING OFF 



     SQL》 SPOOL PUB_SYN。SQL 



     SQL》 SELECT 'CREATE PUBLIC SYNONYM ' || TABLE_NAME || ' FOR ' || 



        2                    OWNER  ||  '。'  ||  TABLE_NAME  ||  ';' 



        3    FROM  SYS。DBA_TABLES 



        4    WHERE  OWNER  =  'RYAN' 



        5    / 



OUTPUT 



    CREATE PUBLIC SYNONYM ACCT_PAY FOR RYAN。ACCT_PAY; 



    CREATE PUBLIC SYNONYM ACCT_REC FOR RYAN。ACCT_REC; 



    CREATE PUBLIC SYNONYM CUSTOMERS FOR RYAN。CUSTOMERS; 



    CREATE PUBLIC SYNONYM EMPLOYEES FOR RYAN。EMPLOYEES; 



    CREATE PUBLIC SYNONYM HISTORY FOR RYAN。HISTORY; 



    CREATE PUBLIC SYNONYM INVOICES FOR RYAN。INVOICES; 



    CREATE PUBLIC SYNONYM ORDERS FOR RYAN。ORDERS; 



    CREATE PUBLIC SYNONYM PRODUCTS FOR RYAN。PRODUCTS; 



    CREATE PUBLIC SYNONYM PROJECTS FOR RYAN。PROJECTS; 



    CREATE PUBLIC SYNONYM VENDORS FOR RYAN。VENDORS; 



    现在  运行这个文件 



INPUT/OUTPUT 



     SQL》 SPOOL OFF 



     SQL》 ED PUB_SYN。SQL 



     SQL》 SET ECHO ON 



     SQL》 SET FEEDBACK ON 



     SQL》 START PUB_SYN。SQL 



     SQL》 CREATE PUBLIC SYNONYM ACCT_PAY FOR RYAN。ACCT_PAY; 



     Synonym created。 



     SQL》 CREATE PUBLIC SYNONYM ACCT_REC FOR RYAN。ACCT_REC; 



     Synonym created。 



     SQL》 CREATE PUBLIC SYNONYM CUSTOMERS FOR RYAN。CUSTOMERS; 



                                                                                     367 


…………………………………………………………Page 368……………………………………………………………

SQL 21  日自学通(V1。0)                                                     翻译人    笨猪 



    Synonym created。 



    SQL》 CREATE PUBLIC SYNONYM EMPLOYEES FOR RYAN。EMPLOYEES; 



    Synonym created。 



    SQL》 CREATE PUBLIC SYNONYM HISTORY FOR RYAN。HISTORY; 



    Synonym created。 



    SQL》 CREATE PUBLIC SYNONYM INVOICES FOR RYAN。INVOICES; 



    Synonym created。 



    SQL》 CREATE PUBLIC SYNONYM ORDERS FOR RYAN。ORDERS; 



    Synonym created。 



    SQL》 CREATE PUBLIC SYNONYM PRODUCTS FOR RYAN。PRODUCTS; 



    Synonym created。 



    SQL》 CREATE PUBLIC SYNONYM PROJECTS FOR RYAN。PROJECTS; 



    Synonym created。 



    SQL》 CREATE PUBLIC SYNONYM VENDORS FOR RYAN。VENDORS; 



    Synonym created 



分析 



    几乎是马上  所有的数据库用户都可以通过公共同义字来访问为 RYAN 所拥有的表了 



现在用户无需在执行查询的时候对表加以限制                        限制的意思就是必须指定表的所有者                    如 



RYAN。VENDORS 



    但是如果公共同义字并不存在呢                 假如 BRANDON       想访问所有为 RYAN        所拥有的表 



来创建私有同义字时该如何做呢 



INPUT/OUTPUT 



    SQL》 CONNECT BRANDON 



    ENTER PASSWORD: ******* 



    CONNECTED。 



    SQL》 SET ECHO OFF 



    SQL》 SET FEEDBACK OFF 



    SQL》 SET HEADING OFF 



    SQL》 SPOOL PRIV_SYN。SQL 



    SQL》 SELECT 'CREATE SYNONYM ' || TABLE_NAME || ' FOR ' || 



                                                                               368 


…………………………………………………………Page 369……………………………………………………………

SQL 21  日自学通(V1。0)                                                              翻译人     笨猪 



         2                    OWNER  ||  '。'  ||  TABLE_NAME  ||  ';' 



         3    FROM  ALL_TABLES 



         4    / 



     CREATE SYNONYM DUAL FOR SYS。DUAL; 



     CREATE SYNONYM AUDIT_ACTIONS FOR SYS。AUDIT_ACTIONS; 



     CREATE SYNONYM USER_PROFILE FOR SYSTEM。USER_PROFILE; 



     CREATE SYNONYM CUSTOMERS FOR RYAN。CUSTOMERS; 



     CREATE SYNONYM ORDERS FOR RYAN。ORDERS; 



     CREATE SYNONYM PRODUCTS FOR RYAN。PRODUCTS; 



     CREATE SYNONYM INVOICES FOR RYAN。INVOICES; 



     CREATE SYNONYM ACCT_REC FOR RYAN。ACCT_REC; 



     CREATE SYNONYM ACCT_PAY FOR RYAN。ACCT_PAY; 



     CREATE SYNONYM VENDORS FOR RYAN。VENDORS; 



     CREATE SYNONYM EMPLOYEES FOR RYAN。EMPLOYEES; 



     CREATE SYNONYM PROJECTS FOR RYAN。PROJECTS; 



     CREATE SYNONYM HISTORY FOR RYAN。HISTORY; 



INPUT/OUTPUT 



     SQL》 SPOOL OFF 



     SQL》 



     SQL》 SET ECHO OFF 



     SQL》 SET FEEDBACK ON 



     SQL》 START PRIV_SYN。SQL 



     Synonym created。 



     Synonym created。 



     Synonym created。 



     Synonym created。 



     Synonym created。 



     Synonym created。 



     Synonym created。 



     Synonym created。 



                                                                                         369 


…………………………………………………………Page 370……………………………………………………………

SQL 21  日自学通(V1。0)                                                         翻译人    笨猪 



    Synonym created。 



    Synonym created。 



    Synonym created。 



    Synonym created。 



    Synonym created。 



分析 



    几乎没做什么工作  BRANDON 就有了所有为 RYAN 所拥有的表的同义字                                  他不再需 



要对表进行限制了 



为你的表创建视图 



    如果你想为一组表创建视图  你需要做与下例类似的工作 



INPUT 



    SQL》 SET ECHO OFF 



    SQL》 SET FEEDBACK OFF 



    SQL》 SET HEADING OFF 



    SQL》 SPOOL VIEWS。SQL 



    SQL》 SELECT 'CREATE VIEW ' || TABLE_NAME || '_VIEW AS SELECT * FROM ' || 



        2                  TABLE_NAME  ||  ';' 



        3    FROM  CAT 



        4    / 



OUTPUT 



    CREATE VIEW ACCT_PAY_VIEW AS SELECT * FROM ACCT_PAY; 



    CREATE VIEW ACCT_REC_VIEW AS SELECT * FROM ACCT_REC; 



    CREATE VIEW CUSTOMERS_VIEW AS SELECT * FROM CUSTOMERS; 



    CREATE VIEW EMPLOYEES_VIEW AS SELECT * FROM EMPLOYEES; 



    CREATE VIEW HISTORY_VIEW AS SELECT * FROM HISTORY; 



    CREATE VIEW INVOICES_VIEW AS SELECT * FROM INVOICES; 



    CREATE VIEW ORDERS_VIEW AS SELECT * FROM ORDERS; 



    CREATE VIEW PRODUCTS_VIEW AS SELECT * FROM PRODUCTS; 



                                                                                   370 


…………………………………………………………Page 371……………………………………………………………

SQL 21  日自学通(V1。0)                                                    翻译人    笨猪 



    CREATE VIEW PROJECTS_VIEW AS SELECT * FROM PROJECTS; 



    CREATE VIEW VENDORS_VIEW AS SELECT * FROM VENDORS; 



INPUT/OUTPUT 



    SQL》 SPOOL OFF 



    SQL》 SET ECHO OFF 



    SQL》 SET FEEDBACK ON 



    SQL》 START VIEWS。SQL 



    View Created。 



    View Created。 



    View Created。 



    View Created。 



    View Created。 



    View Created。 



    View Created。 



    View Created。 



    View Created。 



    View Created。 



分析 



    在上边的 SQL  语句中生成了一个叫 VIEW。SQL               的文件  输出文件变成了一个 SQL  文 



件   其中包括着对指定的表所创建的视图                   在运行这个文件之后            我们可以看到视图已经 



创建了 



在一个计划中清除其所有的表的内容 



    清除表是在开发环境中出现的工作                  为了有效地开发测试数据载入和 SQL  的性能  数 



据是经常需要重新载入的              这一过程可以确定和清除 BUG              经常测试后的应用程序才会转 



入生产环境中 



    下边的例子将清除一个工作中的所有的表的内容 



INPUT 



    SQL》 SET ECHO OFF 



                                                                              371 


…………………………………………………………Page 372……………………………………………………………

SQL 21  日自学通(V1。0)                                                              翻译人     笨猪 



     SQL》 SET FEEDBACK OFF 



     SQL》 SET HEADING OFF 



     SQL》 SPOOL TRUNC。SQL 



     SQL》 SELECT 'TRUNCATE TABLE ' || TABLE_NAME || ';' 



         2    FROM  ALL_TABLES 



         3    WHERE  OWNER  =  'RYAN' 



         4    / 



OUTPUT 



     TRUNCATE TABLE ACCT_PAY; 



     TRUNCATE TABLE ACCT_REC; 



     TRUNCATE TABLE CUSTOMERS; 



     TRUNCATE TABLE EMPLOYEES; 



     TRUNCATE TABLE HISTORY; 



     TRUNCATE TABLE INVOICES; 



     TRUNCATE TABLE ORDERS; 



     TRUNCATE TABLE PRODUCTS; 



     TRUNCATE TABLE PROJECTS; 



     TRUNCATE TABLE VENDORS; 



     如果你敢的话你就运行一下这个脚本 



INPUT/OUTPUT 



     SQL》 SPOOL OFF 



     SQL》 SET FEEDBACK ON 



     SQL》 START TRUNC。SQL 



     Table Truncated。 



     Table Truncated。 



     Table Truncated。 



     Table Truncated。 



     Table Truncated。 



     Table Truncated。 



     Table Truncated。 



                                                                                         372 


…………………………………………………………Page 373……………………………………………………………

SQL 21  日自学通(V1。0)                                               翻译人    笨猪 



    Table Truncated。 



    Table Truncated。 



    Table Truncated。 



分析 



    你已经把所有的为 RYAN  所属的表的内容清除了                 这很容易      如果你准备重新构建你 



的表数据时你可以使用这项技术 



技巧    当在一个计划中运行储如清除表之类的操作时                    你必须对你将要清理的表做一个很 



     好的备份      即便你肯定你再也不需要它的时候也要这样做                    是后也许会有人坚持要 



     求你恢复原来的数据 



使用 SQL 来生成 SHELL 脚本 



    你也可以使用 SQL  来生成其它形式的脚本                 比如说 SHELL  脚本      例如   ORACLE 



RDBMS  服务可能会运行于 UNIX 环境下            这是比 PC 环境更大的代表          所以  UNIX  需要 



对文件进行更为有效的管理             通过创建脚本你可以很容易地管理数据库的文件 



    下边的工作是删除在一个数据库中的表空间  尽管可以使用 SQL 来删除表空间  但是 



与表空间相关的事实的的数据文件却必须在操作系统中才能删除 



    下一步是生成一个 SQL 脚本来删除表空间 



INPUT 



    SQL》 SET ECHO OFF 



    SQL》 SET FEEDBACK OFF 



    SQL》 SET HEADING OFF 



    SQL》 SPOOL DROP_TS。SQL 



    SQL》   SELECT   'DROP   TABLESPACE   '   ||   TABLESPACE_NAME   ||   '   INCLUDING 



CONTENTS;' 



        2    FROM  SYS。DBA_TABLESPACES 



        3    / 



OUTPUT 



    DROP TABLESPACE SYSTEM INCLUDING CONTENTS; 



    DROP TABLESPACE RBS INCLUDING CONTENTS; 



                                                                        373 


…………………………………………………………Page 374……………………………………………………………

SQL 21  日自学通(V1。0)                                                  翻译人    笨猪 



    DROP TABLESPACE TEMP INCLUDING CONTENTS; 



    DROP TABLESPACE TOOLS INCLUDING CONTENTS; 



    DROP TABLESPACE USERS INCLUDING CONTENTS; 



    然后你需要生成一个脚本文件以在表空间删除后在操作系统中删除数据库文件 



INPUT/OUTPUT 



    SQL》 SPOOL OFF 



    SQL》 SPOOL RM_FILES。SH 



    SQL》 SELECT 'RM …F ' || FILE_NAME 



        2    FROM  SYS。DBA_DATA_FILES 



        3    / 



    rm …f /disk01/orasys/db01/system0。dbf 



    rm …f /disk02/orasys/db01/rbs0。dbf 



    rm …f /disk03/orasys/db01/temp0。dbf 



    rm …f /disk04/orasys/db01/tools0。dbf 



    rm …f /disk05/orasys/db01/users0。dbf 



    SQL》 spool off 



    SQL》 



分析 



    现在你已经生成了两个脚本              你可以运行脚本来删除表空间                然后在操作系统中运行 



SHELL 脚本来删除相关的数据文件               你会发现有很多种方法来用 SQL  生成和管理非 SQL 



的脚本 



再建表和索引 



    尽管有许多工具可以帮助你再建表和索引                    然而对于这目的你可以直接使用 SQL 来完 



成  你可以从数据字典中获得所有的你需要重建的表和索引的信息                               但是要有效地完成这 



个工作没有过程语言           如 PL/SQL 或 SHELL 脚本      的支持是不行的 
返回目录 上一页 下一页 回到顶部 9 9
快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!