SQL 21日自学通(V3.0)(PDF格式)-第70部分
按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!
时候不输出列标头
SET HEADING ' ON | OFF '
SPOOL FILENAME/OFF
SPOOL 可以将你的查询结果直接地输入到一个文件中 要想打开 SPOOL 文件 你需
要输入
spool filename
如果想关掉 SPOOL 文件 你应该输入
spool off
355
…………………………………………………………Page 356……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
START FILENAME
大多数的我们所学习的 SQL 命令都是在 SQL》下运行的 另外的一种运行 SQL 语句的
方法是创建 SQL 执行文件 在 SQL*PLUS 中 运行 SQL 文件的命令是 START FILENAME
START FILENAME
ED FILENAME
ED 是 ORACLE 7 的用以打开文件 文件是已经存在的 的命令 当你使用 ED 打开
一个文件以后 你就进入了一个全屏幕的编辑环境 它的使用要比在 SQL 提示符下输入 SQL
语句更容易 你可以使用它来修改你的 SPOOL 文件 你将会发现当你在创建 SQL 脚本的
时候你会非常频繁地使用它 因为你出于定制的目的你不得不经常地修改脚本的内容 但
是 你的大多数定制工作是用 SQL*PLUS 来完成的
ED FILENAME
计算所有的表中的行数
在第一个例子中我们会向你演示如何去除你的 SPOOL 文件中的不正确的行 这样你
的 SQL 脚本在运行的时候就不会返回错误了
注 请注意在本例中我们所使用的编辑技术 因为我们在之后的例子中将不再进行这一步
工作的演示 我们假定到目前为止你已经掌握了基本的 SQL 语法 此外 你也可以使
用不同的编辑方法来编辑你的 SPOOL 文件
现在回想一下对一个表中的所有行进行计数的函数 COUNT * 你应该已经知道了如何
对一个表中的所有行进行计数 例如
INPUT
SELECT COUNT(*) FROM TBL1
OUTPUT
COUNT(*)
29
实现的方法很容易 可是如果你想对你的工程中所有属于你的表的行数进行计数时呢
例如 属于你的表如下表所列
356
…………………………………………………………Page 357……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
INPUT/OUTPUT
SELECT * FROM CAT;
TABLE_NAME TABLE_TYPE
ACCT_PAY TABLE
ACCT_REC TABLE
CUSTOMERS TABLE
EMPLOYEES TABLE
HISTORY TABLE
INVOICES TABLE
ORDERS TABLE
PRODUCTS TABLE
PROJECTS TABLE
VENDORS TABLE
10 rows selected。
分析
如果你想知道你的表有几行 你可能会对每一个表使用 COUNT * 函数 FEEDBACK
的结果如下
10 rows selected
下边的 SELECT 语句将会生成更多的 SELECT 语句来得到上表中的每一个表的行数
INPUT/OUTPUT
SQL》 SET ECHO OFF
SQL》 SET FEEDBACK OFF
SQL》 SET HEADING OFF
SQL》 SPOOL CNT。SQL
SQL》 SELECT 'SELECT COUNT(*) FROM ' || TABLE_NAME || ';'
2 FROM CAT
3 /
SELECT COUNT(*) FROM ACCT_PAY;
SELECT COUNT(*) FROM ACCT_REC;
SELECT COUNT(*) FROM CUSTOMERS;
SELECT COUNT(*) FROM EMPLOYEES;
SELECT COUNT(*) FROM HISTORY;
SELECT COUNT(*) FROM INVOICES;
357
…………………………………………………………Page 358……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
SELECT COUNT(*) FROM ORDERS;
SELECT COUNT(*) FROM PRODUCTS;
SELECT COUNT(*) FROM PROJECTS;
select count(*) FROM VENDORS;
分析
在上例中的第一个动作使用了 SQL*PLUS 中的命令 设置 echo off feedback off 和
heading off 是将实际的输出结果加以简化 然后使用 SPOOL 命令来把输出的结果重定位到
一个叫 CNT。SQL 的文件中 最后的工作是执行这个 SELECT 语句 它将会生成其它形式
的 SQL 语句 注意在需要生成的 SELECT 语句上要使用单引号 成对的单引号和联接符
可以让你把实际的数据和字符串结合在一起成为一个新的 SQL 语句 本例中从数据字典中
选择了数据 命令 SPOOL OFF 则关闭了输出文件
技巧 在你创建了文件并把你的文件提交运行之前一定把编辑它以使它的语法更加符合你
的要求
INPUT
SQL》 SPOOL OFF
SQL》 ED CNT。SQL
OUTPUT
SQL》 SELECT 'SELECT COUNT(*) FROM '||TABLE_NAME||';' FROM CAT;
SELECT COUNT(*) FROM ACCT_PAY;
SELECT COUNT(*) FROM ACCT_REC;
SELECT COUNT(*) FROM CUSTOMERS;
SELECT COUNT(*) FROM EMPLOYEES;
SELECT COUNT(*) FROM HISTORY;
SELECT COUNT(*) FROM INVOICES;
SELECT COUNT(*) FROM ORDERS;
SELECT COUNT(*) FROM PRODUCTS;
SELECT COUNT(*) FROM PROJECTS;
SELECT COUNT(*) FROM VENDORS;
SQL》 SPOOL OFF
分析
358
…………………………………………………………Page 359……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
SPOOL OFF 命令关闭了输出的文件 然后我们使用 ED 来编辑这个文件 这时你就会
进行你所创建的文件的内部了 你应该从这个文件中去掉不必要的行 例如已经知道了结
果的 SELECT 语句以及在文件末尾的 SPOOL OFF 命令
你的文件在编辑完之后应该如下所示 注意 其中的每一行都是一个完整的 SQL 语句
SELECT COUNT(*) FROM ACCT_PAY;
SELECT COUNT(*) FROM ACCT_REC;
SELECT COUNT(*) FROM CUSTOMERS;
SELECT COUNT(*) FROM EMPLOYEES;
SELECT COUNT(*) FROM HISTORY;
SELECT COUNT(*) FROM INVOICES;
SELECT COUNT(*) FROM ORDERS;
SELECT COUNT(*) FROM PRODUCTS;
SELECT COUNT(*) FROM PROJECTS;
SELECT COUNT(*) FROM VENDORS;
现在 我们来执行这个文件
INPUT/OUTPUT
SQL》 SET ECHO ON
SQL》 SET HEADING ON
SQL》 START CNT。SQL
SQL》 SELECT COUNT(*) FROM ACCT_PAY;
COUNT(*)
7
SQL》 SELECT COUNT(*) FROM ACCT_REC;
COUNT(*)
9
SQL》 SELECT COUNT(*) FROM CUSTOMERS;
COUNT(*)
5
SQL》 SELECT COUNT(*) FROM EMPLOYEES;
COUNT(*)
359
…………………………………………………………Page 360……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
10
SQL》 SELECT COUNT(*) FROM HISTORY;
COUNT(*)
26
SQL》 SELECT COUNT(*) FROM INVOICES;
COUNT(*)
0
SQL》 SELECT COUNT(*) FROM ORDERS;
COUNT(*)
0
SQL》 SELECT COUNT(*) FROM PRODUCTS;
COUNT(*)
10
SQL》 SELECT COUNT(*) FROM PROJECTS;
COUNT(*)
16
SQL》 SELECT COUNT(*) FROM VENDORS;
COUNT(*)
22
SQL》
分析
Set echo on 可以让你在执行文件的时候看到其中的每一条语句 Set heading on 则可以
显示每个 SELECT 语句的列标头 COUNT(*) 如果你还输入了 set feedback on 的话那么
1 row selected
将会出现在每个计数结果的后边 在这个例子中我们使用 SQL*PLUS 中的 START 命
令来执行了 SQL 脚本 可是 如果你要处理的表不是 10 个而是 50 个时又会怎能样呢
注 一定要正确地使用单引号以保证生成的 SQL 脚本的正确 你要把你想生成的全部语句
都用单引号括起来 在本例中 你用单引号括起来的 SQL 语句如; 'SELECT COUNT(*)
FROM' 和 ';'。不会从表中选择数据
360
…………………………………………………………Page 361……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
为多个用户赋予系统权限
作为一个数据库管理员或有维护其它用户任务的个体 你经常会收到一些用户的请求
然后将不得不将某些权限赋予一些用户以使他们可以进行正常的数据库访问 你也会由于
他们工作的变动而相应地改变他们的权限 这可以通过今天的方法来生成 GRANT 语句为
多个用户赋予系统权限和规则
INPUT
SQL》 SET ECHO OFF
SQL》 SET HEADING OFF
SQL》 SET FEEDBACK OFF
SQL》 SPOOL GRANTS。SQL
SQL》 SELECT 'GRANT CONNECT; RESOURCE TO ' || USERNAME || ';'
2 FROM SYS。DBA_USERS
3 WHERE USERNAME NOT IN ('SYS';'SYSTEM';'SCOTT';'RYAN';'PO7';'DEMO')
4 /
OUTPUT
GRANT CONNECT; RESOURCE TO KEVIN;
GRANT CONNECT; RESOURCE TO JOHN;
GRANT CONNECT; RESOURCE TO JUDITH;
GRANT CONNECT; RESOURCE TO STEVE;
GRANT CONNECT; RESOURCE TO RON;
GRANT CONNECT; RESOURCE TO MARY;
GRANT CONNECT; RESOURCE TO DEBRA;
GRANT CONNECT; RESOURCE TO CHRIS;
GRANT CONNECT; RESOURCE TO CAROL;
GRANT CONNECT; RESOURCE TO EDWARD;
GRANT CONNECT; RESOURCE TO