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

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

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



…………………………………………………………Page 468……………………………………………………………

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



输出 



    SQL》 @main 



分析 



    在启动 main。sql  以后  你可以运行在这个文件中的每一个 SQL 命令  query1 到 query5 



将会被执行      次序如下图所示 



在你的 SQL 脚本中加入注释 



    SQL*PLUS 为你提供了三种在脚本文件中加入注释的方法 



    ………一次可以注释一行语句 



    REMARK 也可以一次注释一行语句 



    /*    */可以注释多行语句 



    请学习下边的例子 



输入 



    SQL》 input 



        1    REMARK  this  is  a  ment 



      2  …this is a ment too 



        3    REM 



        4    … SET  MANDS 



                                                                        468 


…………………………………………………………Page 469……………………………………………………………

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



         5    set  echo  on 



         6    set  feedback  on 



         7    … SQL  STATEMENT 



         8    select  * 



         9    from  products 



       10 



     SQL》 



     如果想看一个脚本文件是如何注释的  请输入 



     SQL》 edit query10 



高级报表 



     现在我们来做一个游戏  通过今天你已经学习的以及你在此之前学习过的概念                                                   你现 



在可以创建一个非常奇特的报表  假设你的脚本名字为 report1。sql                                     运行它以后         坐下来 



看它的结果 



输入 



     SQL》 @report1 



输出 



     SQL》 set echo on 



     SQL》 set pagesize 50 



     SQL》 set feedback off 



     SQL》 set newpage 0 



     SQL》 col product_name hea 'PRODUCT|NAME' for a20 trunc 



     SQL》 col unit_cost hea 'UNIT|COST' for 99。99 



     SQL》 col product_qty hea 'QTY' for 999 



     SQL》 col total for 99;999。99 



     SQL》 spool report 



     SQL》 pute sum of total on customer 



     SQL》 pute sum of total on report 



     SQL》 break on report on customer skip 1 



                                                                                             469 


…………………………………………………………Page 470……………………………………………………………

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



          SQL》 select o。customer; p。product_name; p。unit_cost; 



              2                  o。product_qty;  (p。unit_cost  *  o。product_qty)  total 



              3    from  orders  o; 



              4              products  p 



              5    where  o。product_id  =  p。product_id 



              6    order  by  customer 



              7    / 



                                        PRODUCT                          UNIT 

CUSTOMER                                                                             QTY      TOTAL 

                                        NAME                             COST 



JONES and SONS                          MICKEY MOUSE LAMP                29。95      50       1;497。50 



                                        NO 2 PENCILS 20 PA             1。99       10       19。90 



                                        COFFEE MUG                       6。95       10       69。50 



Sum                                                                                           1;586。90 



PARAKEET CONSULTING GROUP               MICKEY MOUSE LAMP                29。95      5        149。75 



                                        NO 2 PENCILS 20 PA             1。99       15       29。85 



                                         SQL MAND REFERENC            29。99      10       299。90 



                                        BLACK LEATHER BRIEFC             99。99      1        99。99 



                                        FAR SIDE CALENDAR                10。50      22       231。00 



Sum                                                                                           810。49 



PLEWSKY MOBILE CARWASH                 MICKEY MOUSE LAMP                 29。95      1        29。95 



                                       BLACK LEATHER BRIEFC              99。99      5        499。95 



                                       BLACK LEATHER BRIEFC              99。99      1        99。99 



                                       NO 2 PENCILS 20 PA              1。99       10       19。90 



                                       NO 2 PENCILS 20 PA              1。99       10       19。90 



Sum                                                                                           669。69 



Sum                                                                                           3;067。08 



     SQL》 Input truncated to 9 characters 



     spool off 



     分析 



          在这个脚本中做了许多的工作                       如果你看到了实际的 SQL 语句                     你可以知道它是从两 



     个表中选择了数据并对它们进行了计算功能                                语句在 WHERE          中归并了两个表并将它们安 



     照客户的名字进行了排序                    这只是基本的  此外                SQL*PLUS     按照你所看到的那样对日期 



     进行了格式化处理  BREAK  命令对报表进行了分组                                   并对每一组和全部的数据进行了汇 



     总 



                                                                                                      470 


…………………………………………………………Page 471……………………………………………………………

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



总结 



   今天主要讲述了 ORACLE 对标准的 SQL  的扩展  这些命令只是你在 SQL*PLUS  的可 



用命令中的一小部分     如果你使用 ORACLE 的产品  那么请检查你的数据库文档        那里有 



你今天学习的内容  而且你还可以从中知道更多的内容 你会发现你几乎可以用 SQL*PLUS 



来完成任何报表工作而无需面向过程型语言的帮助           如果你没有使用 ORACLE 的产品  那 



么今天的所学将会对你从数据库中获得数据的方法得到提高  许多的 SQL 解释器都对标准 



的 SQL 进行了扩展和增强 



问与答 



   问  我既然可以直接用 SQL  来得到结果  那么为什么我还要在 SQL*PLUS     上花这么 



多的时间 



   答  如果你需要生成简单的报表  那么直接用 SQL  就行了  但是使用 SQL*PLUS     你 



可以做得更快  而且可以肯定的是你的报表可以需要的内容是非常多的 



   问  如果 DUAL 表没有 COLUMN 我应该如何选择它 



   答  因为 SYSDATE 是一个预定义的列  所以你可以从 DUAL  中选择 SYSDATE 或任 



何其它的有效的表 



   问  我是否可以在 DECODE  中使用其它的 DECODE 



   答  当然可以  它是可以嵌套的  在 SQL  中你可以在函数中运行其它的函数来得到你 



想要的结果 



校练场 



1  哪些命令可以改变你的 SQL 会话的性能 



2  你可以在 SQL 的脚本中提示用户输入参数并根据输入的参数运行吗 



3  如果你对 CUSTOMERS 表创建了一个汇总报表     你如果在你的报表中对你的数据进行 



  分组 



4  你在使用 LOGIN。SQL 文件时有哪些限制 



5  DECODE 函数与过程语言中的 LOOP 功能是等价的  对不对 



6  如果你将查询重新定向到一个已经存在的文件中 你的输出将追加到这个文件 对不对 



                                                     471 


…………………………………………………………Page 472……………………………………………………………

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



练习 



1   利用在今天开始时的 PRODUCTS              表    写一个查询选择其中的所有数据并对记录的个数 



   进行汇总       要生成报表并且不得使用 SET FEEDBACK ON 命令 



2   假如今天是 1998 年 5 月 12 日星期一  写一个查询产生下边的输出 



    Today is Monday; May 12 1998 



3   试一下下边的语句 



             1    select  * 



             2    from  orders 



             3    where  customer_id  =  '001' 



           4* order by customer_id; 



    不需要在缓冲区中重新输入这些语句  将 FROM 子句中的表改为 CUSTOMERS 



    在 ORDER BY 子句中加入 DESC 



                                                                                    472 


…………………………………………………………Page 473……………………………………………………………

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



第 21 天     常见的 SQL 错误及解决方法 



目标 



   欢迎来到第 21 天  在今天你将学习下边的内容 



   l  几种典型的错误及它们的解决方案 



   l  SQL 用户常犯的逻辑错误 



   l  防止再犯日常错误的办法 



介绍 



   今天你将会看到一些人们     不论是菜鸟还是老鸟  在使用 SQL 常犯的错误  你也不可 



避免地要犯这些错误     但是对这些错误熟悉了以后会帮助你在尽可以短的时间内解决它们 



注意  我们使用 PERSONAL  ORACLE  7 来进行我们的例子  在你的解释器中也会有与之 



    类似的错误   只是错误的代码和名字可能会不相同  我们在 SQL*PLUS      中运行这些 



    语句并将 ECHO 和 FEEDBACK 设置为 ON  以看到这些语句 



   要知道一些错误确实可以产生的错误信息        然而逻辑语法的不充分可以会在运行时导 



致更大的错误    通过仔细的校审    你会避免大多数的错误     尽管你会经常被错误卡住 



常见的错误 



   在这一部分你将会见到在所有的 SQL 语句中看到的一些常见的错误          大多数的错误简 



单到你甚至想打自己几个耳光      可是也有一些错误看上去很明显但却很容易误码率解 



Table or View Does Not Exist 



   当你在试图访问一个并不存在的表时产生的错误  这是很明显的  例如 



输入 



   SQL》 @tables。sql 



输出 



                                                    473 


…………………………………………………………Page 474……………………………………………………………

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



     SQL》 spool tables。lst 



     SQL》 set echo on 



     SQL》 set feedback on 



     SQL》 set pagesize 1000 



     SQL》 select owner|| '。' || table_name 



           2    from  sys。dba_table 



           3    where  owner  =  'SYSTEM' 



           4    order  by  table_name 



           5    / 



                   from  sys。dba_table 



                 * 



     ERROR at line 2: 



     ORA…00942: table or view does not exist 



      SQL》 spool off 



       SQL》 



分析 



     注意在表的名字后边的星号                    正确的名是 sys。dba_tables          表名中少了一个 S 



     但是如果你已经知道了表是存在的而你仍然收到了错误信息呢                                           有时你收到这个信息 



是因为表并不存在  但是也可以是由于安全原因 — — 也就是说                                       表是存在的          但是你没有 



权限访问它  这个错误用数据库服务人员的话来精确地说就是  你没有权限来访问这个表 



技巧  在着急之前             请立即先确认在 DBA               的帐号或可用的工程帐号中这个表是否存在 



      你会经常发现表不存在的原因是因为用户没有正当的访问这个表的权限 



Invalid Username or Password 



输入 



 SQL*Plus: Release 3。2。3。0。0 on Sat May 10 11:15:35 1997 



Copyright (c) Oracle Corporation 1979; 1994。  All rights reserved。 



Enter user…name: rplew 

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