(Oracle管理)ORACLE数据库sqlplus使用技巧

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Sql*plus中蕴藏着好多技巧,如果掌握这些技巧,对于在oracle数据库下进行快速开发与有效维护数据库都是有益的。

1.使用SQL*PLUS动态生成批量脚本

将spool与select命令结合起来使用,可以生成一个脚本,脚本中包含有可以批量执行某一任务的语句。

例1:

生成一个脚本,删除SCOTT用户下的所有的表:

a. 创建gen_drop_table.sql文件,包含如下语句:

SPOOL c:\drop_table.sql

SELECT 'DROP TABLE '|| table_name ||';' FROM user_tables;

SPOOL OFF

b. 以SCOTT用户登录数据库

SQLPLUS > @ …..\gen_dorp_table.sql

c. 在c盘根目录下会生成文件drop_table.sql文件,包含删除所有表的语句,如下所示:

SQL>SELECT 'DROP TABLE '|| table_name ||';' FROM user_tables;

'DROPTABLE'||TABLE_NAME||';'

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

DROP TABLE DEPT;

DROP TABLE EMP;

DROP TABLE PARENT;

DROP TABLE STA T_VENDER_TEMP;

DROP TABLE TABLE_FORUM;

5 rows selected.

SQL>SPOOL OFF

d. 对生成的drop_tabl

e.sql文件进行编辑去掉不必要的部分,只留下drop table …..语句

e. 在scott用户下运行dorp_table.sql文件,删除scott用户下所有的表。

SQLPLUS > @ c:\dorp_table.sql

在上面的操作中,在生成的脚本文件中会有多余的字符,如运行的sql语句,标题,或返回的行数,需要我们编辑该脚本后再运行,给实际的操作带来诸多不便。懒惰是人的本性,这促使我们用更简单的办法来实现上面的任务。

a. 创建gen_drop_table.sql文件,包含如下语句:

set echo off

set feedback off

set newpage none

set pagesize 5000

set linesize 500

set verify off

set pagesize 0

set term off

set trims on

set linesize 600

set heading off

set timing off

set verify off

set numwidth 38

SPOOL c:\drop_table.sql

SELECT 'DROP TABLE '|| table_name ||';' FROM user_tables;

SPOOL OFF

b. 以SCOTT用户登录数据库

SQLPLUS > @ …..\gen_dorp_table.sql

c. 在c盘根目录下会生成文件drop_table.sql文件,包含删除所有表的语句,如下所示: DROP TABLE DEPT;

DROP TABLE EMP;

DROP TABLE PARENT;

DROP TABLE STA T_VENDER_TEMP;

DROP TABLE TABLE_FORUM;

d. 在scott用户下运行dorp_tabl

e.sql文件,删除scott用户下所有的表。

SQLPLUS > @ c:\dorp_table.sql

2.将一个表中的数据导出生成一个文本文件,列与列之间以”,”隔开

set echo off

set feedback off

set newpage none

set pagesize 5000

set linesize 500

set verify off

set pagesize 0

set term off

set trims on

set linesize 600

set heading off

set timing off

set verify off

set numwidth 38

SPOOL c:\drop_table.sql

select DEPTNO || ',' || DNAME FROM DEPT;

SPOOL OFF

将上面的内容保存为一个文本文件后,以scott登录,执行该文件后显示结果:

10,ACCOUNTING

20,RESEARCH

30,SALES

40,OPERATIONS

通过上面的两个例子,我们可以将:

set echo off

set feedback off

set newpage none

set pagesize 5000

set linesize 500

set verify off

set pagesize 0

set term off

set trims on

set linesize 600

set heading off

set timing off

set verify off

set numwidth 38

SPOOL c:\具体的文件名

你要运行的sql语句

SPOOL OFF

作为一个模版,只要将必要的语句加入这个模版就可以了。

在oracle的较新版本中,还可以用set colsep命令来实现上面的功能:

SQL> set colsep ,

SQL> select * from dept;

10,ACCOUNTING,NEW YORK

20,RESEARCH,DALLAS

30,SALES,CHICAGO

40,OPERATIONS,BOSTON

35,aa,bb

3.动态生成spool命令所需的文件名

在我们上面的例子中,spool命令所需要的文件名都是固定的。有时我们需要每天spool 一次,并且每次spool的文件名都不相同,如文件名包含当天的日期,该如何实现呢?

column dat1 new_value filename;

select to_char(sysdate,'yyyymmddhh24mi') dat1 from dual;

spool c:\&&filename..txt

select * from dept;

spool off;

4.如何从脚本文件中得到WINDOWS环境变量的值:

在windos中:

spool c:\temp\%ORACLE_SID%.txt

select * from dept;

相关文档
最新文档