SQL 21日自学通(V3.0)(PDF格式)-第101部分
按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!
…………………………………………………………Page 561……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
COUNT(*) FROM TABLE_NAME;
这不是有效的 SQL 语句
12 下边的 SQL 语句是否可以工作 它会输出什么
SQL》 SET ECHO OFF
SQL》 SET FEEDBACK OFF
SQL》 SPOOL GRANT。SQL
SQL》 SELECT 'GRANT CONNECT DBA TO ' || USERNAME || ';'
2 FROM SYS。DBA_USERS
3 WHERE USERNAME NOT IN ('SYS';'SYSTEM';'SCOTT')
4 /
回答仍是 是也不是 该语句将会生成 SQL 脚本 但是由于生成的 SQL 语句
不完整 你需要在 CONNECT 和 DBA 之间加入逗号
SELECT 'GRANT CONNECT; DBA TO ' || USERNAME || ';'
13 下边的 SQL 语句是否可以工作 它会输出什么
SQL》 SET ECHO OFF
SQL》 SET FEEDBACK OFF
SQL》 SELECT 'GRANT CONNECT; DBA TO ' || USERNAME || ';'
2 FROM SYS。DBA_USERS
3 WHERE USERNAME NOT IN ('SYS';'SYSTEM';'SCOTT)
5 /
该语句是正确的 生成的 SQL 语句将会给所有的用户以 CONNECT 和 DBA 权
限
14 在运行生成的 SQL 时最为将 FEEDBACK 设置为 ON 对不对
不对 如果你不关心有多少行被选出时可以把它关闭 它不是你要生成的 SQL 语句
的一部分
15 从 SQL 中生成 SQL 语句时 必须将输入的结果重新定向到一个列表或 LOG 文件
中 对不对
不对 你应该重新定向到一个 SQL 文件中或任何你所命名的文件中
16 在生成 SQL 语句用以对表的内容进行删减时 你必须先确认自己已经对所要删减
561
…………………………………………………………Page 562……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
的表作了很好的备份 对不对 对 这样最安全
17 什么是 ED 命令
ED 命令是一个全屏幕的编辑器 所 UNIX 的 VI 或 WINDOWS 下的记事本类似
18 SPOLL OFF 命令是做什么的
关闭一个假脱机文件
练习答案
3 使用 SYS。DBA_USERS 视图 在 PERSONAL ORACLE 7 中 写一个语句来生成一
系列 GRANT 语句为下边的五个用户 John Kevin Ryan Ron 和 Chris 授权 使
他们可以访问 History_tbl 表 在写语句时对应的用户名用 USERNAME 来代替
SQL》 SET ECHO OFF
SQL》 SET FEEDBACK OFF
SQL》 SPOOL GRANTS。SQL
SQL》 SELECT 'GRANT SELECT ON HISTORY_TBL TO ' || USERNAME || ';'
2 FROM SYS。DBA_USERS
3 WHERE USERNAME IN ('JOHN';'KEVIN';'RYAN';'RON';'CHRIS')
4 /
grant select on history_tbl to JOHN;
grant select on history_tbl to KEVIN;
grant select on history_tbl to RYAN;
grant select on history_tbl to RON;
grant select on history_tbl to CHRIS;
4 用本章给出的例子作指引 写一些 SQL 来创建一些可以生成你能使用的 SQL 语句
自己做
警告 除非你已经彻底地明白了本章的概念 否则一定要注意生成 SQL 语句可能会修改数
据或数据库的结构
562
…………………………………………………………Page 563……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
第 18 天 PL/SQL 简介
问题答案
8 如何在数据库中使用触发机制
数据库的触发机制可以在指定表中的数据发生变化时进行执行一些特定的操作 例
如 如果你改变了一个表 那么触发机制可以将被改变的数据存入历史记录表中以备
后查
9 是否可以将相关的过程存储在一起
相关的过程可以存储在包中
10 可以在 PL/SQL 中使用数据操作语言 对不对 对
11 可以在 PL/SQL 中使用数据定义语言 对不对
不对 DDL 不能在 PL/SQL 中使用 用自动的方法来改变数据库的结构不是好主意
12 在 PL/SQL 的语法中是否支持直接的文本输出
它不被 PL/SQL 所直接支持 但是 它可以通过标准的包 DBMS_OUTPUT 来输出
13 给出 PL/SQL 语句块的三个主要部分
DELCARE 部分 PROCEDURE 部分 EXCEPTION 部分
14 请给出与游标控制相关的命令
DECLARE OPEN FETCH CLOSE
练习答案
5 请定义一个变量 使它可以接受的最大数值为 99。99
DECLARE
HourlyPay number(4;2);
6 请定义一个指针 它的内容包括 CUSTOMER_TABLE 表中的所有 CITY 为
INDIANAPOLIS 的客户
DECLARE
cursor c1 is
select * from customer_table
where city = 'INDIANAPOLIS';
563
…………………………………………………………Page 564……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
7 定义一个名字为 UnknownCode 的异常
DECLARE
UnknownCode EXCEPTION;
8 请写一个语句 使得在 AMOUNT_TABLE 中的AMT 当 CODE 为 A 时其值为 10
当 CODE 为 B 时其值为 20 当 CODE 既不是 A 也不是 B 时激活一个名字叫
UnknownCode 的异常 表中的内容只有一行
IF ( CODE = 'A' ) THEN
update AMOUNT_TABLE
set AMT = 10;
ELSIF ( CODE = 'B' ) THEN
update AMOUNT_TABLE
set AMT = 20;
ELSE
raise UnknownCode;
END IF;
第 19 天 TRANSACT…SQL 简介
问题答案
问 在 ORACLE 的 PL/SQL 中与在 TRANSACT…SQL 中 SQL 字的使用方法与 ANSI 标准
的 SQL 是完全相同的 对不对
答 不对 这些关键字不受版权的保护 产品在许多内容上都与 ANSI 标准一致 但不是
每样东西都一致
问 静态的 SQL 比动态的 SQL 灵活性差 尽管它的性能要比动态的好 对不对
答 对 静态的 SQL 需要进行预编译 而不是动态编译 所以它的灵活性不如动态 SQL
但是由于查询已经被处理过 所以它的性能要更好些
练习答案
3 如果你没有使用 SYBASE 或 MICROSOFT 的 SQL SERVER 那么请你比较一个你的产
品对 SQL 的扩展与今天所讲的有何不同
由于今天所讲的几乎全是 TRANSACT…SQL 我们并没有对 ANSI 标准的其它扩展进行
564
…………………………………………………………Page 565……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
探讨 大多数的数据库随机文档都标明了它所提供了对 SQL 的有效的扩展 这些扩展在其
它数据库中使用是不同的
4 写一组 SQL 语句 它可以对一些已知的条件进行检测 如果条件为真 执行一些操作
否则的话执行另一些操作
该操作需要使用 IF 语句 具有的逻辑结构今天已经讨论过了
第 20 天 SQL*PLUS
问题答案
7 哪些命令可以改变你的 SQL 会话的性能
SET 命令可以改变你的会话设置
8 你可以在 SQL 的脚本中提示用户输入参数并根据输入的参数运行吗
可以 你的脚本能从用户输入接受参数并把它赋给变量
9 如果你对 CUSTOMERS 表创建了一个汇总报表 你如何在你的报表中对你的数据进行
分组
你可能会依据客户进行分组 因为你的数据是从客户表中选择的
10 你在使用 LOGIN。SQL 文件时有哪些限制
它的限制就是你输入到其中的内容必须是 SQL 或 SQL*PLUS 的有效命令
11 DECODE 函数与过程语言中的 LOOP 功能是等价的 对不对
不对 它与 IF THEN 类似
12 如果你将查询重新定向到一个已经存在的文件中 你的输出将追加到这个文件 对不
对
不对 新文件将会覆盖原文件的内容
练习答案
4 利用在今天开始时的 PRODUCTS 表 写一个查询选择其中的所有数据并对记录的个数
进行汇总 要生成报表并且不得使用 SET FEEDBACK ON 命令
pute sum of count(*) on report
break on report
565
…………………………………………………………Page 566……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
select product_id; product_name; unit_cost; count(*)
from products
group by product_id; product_name; unit_cost;
5 假如今天是 1998 年 5 月 12 日星期一 写一个查询产生下边的输出
Today is Monday; May 12 1998
答
set heading off
select to_char(sysdate;' 〃Today is 〃Day; Month dd yyyy')
from dual;
6 试一下下边的语句
1 select *
2 from orders
3 where customer_id = '001'
4* order by customer_id;
不需要在缓冲区中重新输入这些语句 将 FROM 子句中的表改为 CUSTOMERS
在 ORDER BY 子句中加入 DESC
l2
c/orders/customer
现在你 DESC 加入到 ODRER BY 子句中
l4
append DESC
第 21 天 常见的 SQL 错误及解决方法
问题答案
1。 A user calls and says; 〃I can't sign on to the database。 But everything was working fine
yesterday。 The error says invalid user/password。 Can you help me?〃 What steps should y