Oracle对操作系统文件的读写操作

php中文网
发布: 2016-06-07 17:29:50
原创
1104人浏览过

在SQL*Plus中可以对操作系统中的文本文件进行简单的读写访问。事先将SQL语句或者PL/SQL块的代码存放在文本文件中,再把文本文件调

在sql*plus中可以对操作系统中的文本文件进行简单的读写访问。
 例如,事先将sql语句或者pl/sql块的代码存放在文本文件中,再把文本文件调入缓冲区中,使之执行。
 或者把当前缓冲区中的内容保存到一个文件中, 或者把sql语句、pl/sql块的执行结果保存到文件中。
 
1.读文件涉及的命令包括@、get、start等命令。
 
1.1 @命令的作用是将指定的文本文件的内容读到缓冲区中,并执行它。文本文件可以是本地文件,也可以是远程服务器上的文件。
 如果是本地文件,@命令的命令的执行格式为:@文件名
 这里的文件名要指定完整的路径,默认的扩展名是.sql,如果脚本文件使用了默认的扩展名,则在@命令中可以省略扩展名。
 如果是远程文件,必须将它存放到一个web服务器上,并以http或ftp方式访问。这时@命令的命令的执行格式为(以http为例):@服务器/文件名
 
使用@命令读取文件时,文件中可以包含多条sql语句,每条语句以分号结束;或者可以包含一个pl/sql块。
 文件被读入缓冲区中以后,sql*plus将按顺序执行文件中的代码,并将执行结果输出到显示器上。
 例如,假设在/home/oracle目录下有一个文件,名为a.sql,文件的内容为:
 select ename from emp where empno=7902;  select dname from dept where deptno=10;
 现在希望通过@命令将这个文件读到缓冲区中,命令执行的执行格式如下:sql> @/home/oracle /a
 
@命令还有一个用法,就是在启动sql*plus的同时,将指定的文件读入缓冲区并执行它。
 这时@命令和文件名一起作为sql*plus的命令行参数,格式如下:sqlplus 用户名/口令 @文件名
 注意,这种格式与以前提到的使用网络服务的格式是很相似的,
 sqlplus 用户名/口令 @文件名
 sqlplus 用户名/口令@网络服务名
 但是仍然有区别,请注意观察:
 sqlplus 用户名/口令@网络服务名 由于文件名和网络服务名都表现为字符串,所以单纯从名字上无法区分到底使用了文件名还是网络服务名。
 二者的区别在于第一种格式中在用户名/口令之后有一个空格,这时将把后面的参数解释为一个文件,并把这个文件加载到缓冲区中。
 在第二种格式中,用户名/口令之后没有空格,这时将后面的参数解释为网络服务名。
 
1.2 get命令的作用与@命令相似,但是它只是把文件加载到缓冲区中,并不直接执行。
 get命令的的执行格式为:get 文件名 选项
 其中文件名的默认扩展名为.sql,在get命令中可以省略。目前get命令只支持本地的操作系统文件。
 可以使用的选项有两个:list和nolist。
 其中list选项指定将文件的内容读到缓冲区的同时,还要在显示器上输出,,这是默认选项。
 选项nolist使得文件的内容不在显示器上输出。
 使用get命令时还要注意,在文本文件中只能包含一条sql语句,而且不能以分号结束。也可以只包含一个pl/sql块,块以分号结束。
 
在使用@和get命令时要注意这些格式上的差别。例如,假设在/home/oracle目录下有一个文件,名为b.sql,文件的内容为:
 select ename from emp where empno=7902 现在先通过get命令把它读入缓冲区,然后执行/命令使之执行:
 sql> get /home/oracle/b  1* select ename from emp where empno=7902 sql> /  ename  ----------  ford
 
1.3 start命令与@命令是等价的,这里不再赘述。
 
2.写文件涉及的命令包括save和spool。
 其中save命令用于将当前缓冲区中的内容写入一个操作系统文件,而spool命令用于将命令的执行结果输出到一个操作系统文件。
 
2.1 save命令的格式为:sql>save 文件名 选项
 其中选项指定以什么样的方式写文件。可以使用的选项有以下三个:
 create 如果文件不存在,则创建。否则,命令执行失败。
 append 如果文件不存在,则创建。否则,在文件末尾追加。
 replace 如果文件不存在,则创建。否则删除原文件,重新创建。
 如果不指定完整的路径,则在当前目录下产生这个文件,文件的默认扩展名是.sql。
 例如,假设当前缓冲区中有一条select语句,使用save命令可以将这条语句写入文件:
 sql> list    1* select * from emp 
 sql> save /home/oracle/aa
 
2.2 spool命令利用假脱机技术,用于将sql*plus的输出写入到文件中,它有以下几种用法:
 spool 得到当前spool的状态,默认为不可用。
 spool 文件名 启动spool,并打开指定的文件。
 spool off 关闭spool,并将sql*plus的输出写入文件中。
 spool out 关闭spool,将sql*plus的输出写入文件中,并同时送往打印机。
 
如果在sql*plus中以命令行的方式执行spool命令,那么从执行spool命令并打开文件开始,此后的所有输出,包括错误信息,以及用户的键盘输入,都将写入指定的文件,直到遇到“spool off”或者“spool out”。
 但是这些信息的写入是一次性完成,即在执行“spool off”或者“spool out”的一瞬间,这些信息才一次全部写入文件,包括最后执行的“spool off”或者“spool out”命令本身。
 文件的默认扩展名为.lst,默认的路径是当前目录。
 
spool命令通常的用法是生成报表。
 首先将精心设计的sql语句存放在一个文件中,在产生输出的语句前后加上spool命令,然后将这个文件读到缓冲区中执行。
 这样在写入的文件中只有命令执行的结果,而不包括sql语句本身。
 
例如,假设当前目录下有一个文件,名为c.sql,它的内容为:
 spool cc  select ename,sal from emp where deptno=10;  spool off 现在将这个文件读到缓冲区中,并使之执行,执行结果如下:
 sql> @c 
 ename sal  clark 2450  king 5000  miller 1300
 文件中sql语句的执行结果显示在屏幕上,同时在当前目录下生成了文件cc.lst,文件的内容与屏幕上显示的结果完全一致。
 

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号