按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!
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: