暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle如何查询输出与报表(下)

Oracle技术就绪 2015-09-29
678

如何查询结果转存到文本文件中


我们在运行SQL语句与SQL*Plus命令时,都产生运行的结果,这些结果有时需要存储到一个文件中以便再阅读或编辑做他用。

问题的提出

如果你希望将查询结果以文本文件的格式记录到OS路径的文件中,以便之后对这些结果进行其他的处理,比如发送给相关人员等,那么,如何实现将查询结果转存在文件中呢?

实现技术

OracleSQL*Plus 提供一个spool 命令可实现将屏幕上的显示信息记录到OS路径的文本文件中,文件的默认类型为.lst

实现步骤

要实现将查询结果转存到OS路径的文本文件中,先用spool 命令指定OS路径和文件名,此外,当我们结束本次的转存时,还必须用spool off 命令标识本次转存到此结束,如:

--

--适应版本:Oracle 9i~12c

--

SQL> spool c:\dept_data

SQL> select * from dept;

DEPTNO DNAME LOC

---------- -------------- -------------

50 abc Beiijing

10 ACCOUNTING NEW YORK

20 RESEARCH DALLAS

30 SALES CHICAGO

40 OPERATIONS BOSTON

60 dlld tj

已选择6行。

SQL> spoo off

说明

当我们使用spool off 命令标识转结束后,被转存的文件以正常关闭的方式结束,这时你可以使用或编辑这个.LST文件了。如果你没有使用spool off 命令标识本次转存的结束,屏幕上最新的信息可能不完全被记录到文件中。

如何将操作中的错误记录到文件中


在执行SQL语句时可能遇到一些环境的原因导致出现错误,而我们希望这些错误进行修正以解决语句错误问题,这是我们调试SQL语句经常采用的方法。

问题的提出

如果你在执行SQL脚本的一系列SQL语句时存在部分语句出现了错误,你希望能对这些错误进行分析和修正,如何将这些错误语句的信息记录到一个表中供你事后检查是一件有意义的事情呢?

实现技术

Oracle11g/12c SQL*Plus给出一个新功能可实现将SQL错误信息记录到表中,这个方法就是使用set errorlog on命令来设置。

实现步骤

SQL>提示下,使用set ERRORLOG ON进行激活,如:

--

--适应版本:Oracle 9i~12c

--

--

SQL> set ERRORLOG ON

SQL> desc SPERRORLOG

Name Null? Type

----------------------------------------- -------- ----------------------------

USERNAME VARCHAR2(256)

TIMESTAMP TIMESTAMP(6)

SCRIPT VARCHAR2(1024)

IDENTIFIER VARCHAR2(256)

MESSAGE CLOB

STATEMENT CLOB

SQL> col username for a20

SQL> select username,timestamp,message from sperrorlog;

USERNAME

--------------------

TIMESTAMP

---------------------------------------------------------------------------

MESSAGE

--------------------------------------------------------------------------------

SCOTT

03-3 -09 08.49.59.000000 上午

ORA-00942: 表或视图不存在

说明

Oracle 11g/12c 版本支持这个功能,其它低版本的SQL*Plus登录到Oracle 11g 系统仍然不能使用这些新功能的。


如何保持自定义的环境变量设置


DBA在维护Oracle系统时,经常按照自己喜好的方法工作,比如,将屏幕的行宽设置为200个字符(set line 200),屏幕显示行设置为60(set pagesize 60)等,当自己使用SQL*Plus进入Oracle后,原来设置的环境变量自动生效。

问题的提出

虽然Oracle 系统提供Set 命令用于设置各项变量的数值,但在默认下,只要你结束本次(退出SQL*Plus环境)会话,你原来在会话中设置的各项变量值就自动失效。那么,如何将自己需要的环境变量保存在Oracle系统内,当下次再次登录到Oracle实例后,这些环境变量自动生效。

实现技术

当你每次登录Oracle系统后,Oracle系统自动执行文件glogin.sql ,你可以将一些环境变量(如linesize)的设置命令或者其它命令放入该文件中。

实现步骤

Windows下对d:\oracle\...\sqlplus\admin\glogin.sql 文件进行编辑,步骤为:

--

--适应版本:Oracle 9i~12c

--

--1.找到相应目录:

C:\app\zhao\product\11.2.0\dbhome_1\sqlplus\admin>dir

驱动器 C 中的卷是本地磁盘

卷的序列号是 7410-DEBF

C:\app\zhao\product\11.2.0\dbhome_1\sqlplus\admin 的目录

2010-07-14 15:04 <DIR> .

2010-07-14 15:04 <DIR> ..

2006-01-12 23:36 342 glogin.sql

2010-07-14 15:04 <DIR> help

2006-03-07 03:24 813 plustrce.sql

2003-02-16 22:47 2,118 pupbld.sql

3 个文件 3,273 字节

--2.编辑 glogin.sql 文件,如:

---- NAME

-- glogin.sql

--

-- DESCRIPTION

-- SQL*Plus global login "site profile" file

--

-- Add any SQL*Plus commands here that are to be executed when a

-- user starts SQL*Plus, or uses the SQL*Plus CONNECT command.

--

-- USAGE

-- This script is automatically run

--

SET SQLPROMPT '_USER SQL> '

set linesize 200

set pagesize 60

--3)使用SQL*Plus 登录,能看到设置变量生效,如:

Microsoft Windows XP [版本 5.1.2600]

(C) 版权所有 1985-2001 Microsoft Corp.

C:\Documents and Settings\zhao>cd\

C:\>sqlplus system/Zhaoyuan123

连接到:

Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - Production

With the Partitioning, OLAP, Data Mining and Real Application Testing options

SYSTEM SQL> show line

linesize 200

SYSTEM SQL>

说明

当你完成对glogin.sql文件的编辑设置后,以后凡是登录到Oracle系统后都会按照这样的环境变量进行设置,建议你在设置时考虑更为合理和符合多数人员的需要。




Oready即为“One Technology Ready”!

Oready不仅仅是数据库领域的专家,同时也是一个社区,我们汇集百位数据库领域资深顾问、讲师,服务于数据中心的技术支持与技能传授,注重对客户的关键数据库运营支撑,强调经验的分享-Skill Transfer,聚焦数据中心的完美结合.


文章转载自Oracle技术就绪,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论