本文从多个方面讲述了SQLPlus技巧。
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 STAT_VENDER_TEMP;
DROP TABLE TABLE_FORUM;
5 rows selected:SQL> SPOOL OFF。 |
d. 对生成的drop_table.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 STAT_VENDER_TEMP;
DROP TABLE TABLE_FORUM; |
d. 在scott用户下运行dorp_t:
able.SQL文件,删除scott用户下所有的表。SQLPLUS > @ c:dorp_table.SQL