友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!
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
快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!