SQL*Plus 中的spool使用方法
在使用SQL*Plus生成报告文件的时候,往往会因为其默认的设置导致输出的结果非常的没有可读性,下面介绍一个日常中会被用到的一个脚本,其中包含一些格式化
输出的set命令
,为了方便理解,我会在每一条set命令之后紧跟着一个简单的解释,请慢慢体会。
sqlplus -s user_name/user_password << EOF >/dev/null
set echo off; -- 不显示脚本中的每个sql
命令(缺省为on)
set feedback off; -- 禁止回显sql命令处理的记录条数(缺省为on)
set heading off; -- 禁止输出标题(缺省为on)
set pagesize 0; -- 禁止分页输出
set linesize 1000; -- 设置每行的字符输出个数为1000,放置换行(缺省为80 )
set numwidth 16; -- 设置number类型字段长度为16(缺省为10)
set termout off; -- 禁止显示脚本中命令的执行结果(缺省为on)
set trimout on; -- 去除标准输出每行的行尾空格(缺省为off)
set trimspool on; -- 去除spool
输出结果中每行的结尾空格(缺省为off)
spool sql_output_file.txt;
... ...
这里输入待执行的SQL命令,SQL命令整个执行过程都会被记录在sql_output_file.txt文件中。
... ...
spool off;
exit;
EOF
经过上面的处理之后,spool出来的数据基本上没有多余的干扰数据了。
没有演示结果的技巧是无用的,也是枯燥的,所以,下面我来演示一下这个脚本的使用过程。
我们以输出all_objects视图的所有内容为例,进行演示。
ora10g@Tdb /home/oracle$ sqlplus -s sec/sec << EOF >/dev/null
set linesize 1000;
> set echo off;
set termout off;
> set feedback off;
> set heading off;
> set pagesize 0;
> set linesize 1000;
> set numwidth 16;
> set termout off;
> set trimout on;
> set trimspool on;
> spool sql_output_file.txt;
> select * from all_objects;
> spool off;
> exit;
> EOF
这里等待几秒钟的时间,查看结果文件sql_output_file.txt,就可以得到all_objects视图内的所有内容了,这个文件的格式是经过我们精心格式化之后的。
具体的导出文件sql_output_file.txt内容很长,不便于贴到这里。
可以使用cat命令查看输出文件的内容
ora10g@Tdb /home/oracle$ cat sql_outpu
相关文档:
Confirming granted privileges
Data Dictionary View Description
ROLE_SYS_PRIVS System privileges granted to roles
ROLE_TAB_PRIVS & ......
Differring Constraints:
Constraints can have the following attributes: DEFFERRABLE / NOT DEFFERRABLE, INITIALLY DEFFERRED / INITIALLY IMMEDIATE.
e.g.:
alter table dept2 add constraint dept2_id_pk primary key (department_id) deferrable initially deferred; // deferring constraint on creation. ......
Merge statement
function benefits: 1) provides the ability to conditionally update, insert or delete data into a database table. 2) performs an update if the row exists, and an insert if it is a new row. --> 1) avoids seperate updates, 2) increase performance and ease of use. 3) is useful in dat ......
以前一直觉得linq to sql生成类似where id not in (1,3,5)或where id not in (select id from ...)这样的条件不是很方便,每次我都是把条件ID事先取到一个数组里,然后用 !Arr.Contains(c.Id)这样处理,今天突然发现这样好傻,其实可以完全直接用linq写成一句,贴个示例在这里,以后备查
from a in TableA where !(fr ......
---附加数据库
sp_attach_db '数据库名','数据库全路径','数据库日志全路径'
---查看数据库逻辑文件名
RESTORE FILELISTONLY from disk = '备份文件'
---还原数据库
restore database hzrb from disk = '备份文件'
with move '主逻辑名' to '存放mdf路径' ......