文章分类 | 推荐文章 | 最新文章 | 热点文章 | 最新软件 | 精品软件 | 下载排行 | 推荐下载 | 免费看大片 | WPS | 杀毒软件
清风网络
首 页 软件下载 网络学院 数码学院
QQ 电脑入门 游戏 操作系统 图形处理 办公软件 媒体动画 精文荟萃 工具软件 网络编程 程序开发 网络技术 认证考试 网站建设 文章专栏
当前位置:清风网络学院网络编程数据库SQLPlus技巧 指定缺省的编辑脚本的目录
精品推荐
特别推荐
·SQL数据库完全使用手册
·进阶:精妙SQL语句介绍
·sql删除记录
·学习SQL语句之SQL语句大全
·数据备份失败的五个原因及解决办法
·解决SQL Server常见的七个经典问题
·SQL存储过程的概念,创建,调用,管理,删除,优点
·带你轻松接触13个数据库术语
·如何恢复系统数据库如何恢复系统数据库?
·通过实例讲解由浅入深学会存储过程
·学会三个范式快速成为数据库设计的高手
·SQL数据库应聘人员面试时经常被问的问题
·问答:查询分析器不能单步调试的的原因
·数据库基础知识:SQL中的IIF语句详解
·WindowsXP+IIS+PHP5+MySQL5+Zend+GD库+phpMyAdmin+PHPWind 5.3 安装教程
·你知道吗?优化数据库前的十大问题
·自动备份注意事项让你远离误删数据噩梦
·关于MSSQL数据库日志满的快速解决办法
·SQL安全设置攻略
·SQL注入的不常见方法
热点TOP10
·学习SQL语句之SQL语句大全
·SQL数据库完全使用手册
·玩转Windows桌面图标
·精妙SQL语句收集
·Transact SQL 常用语句以及函数
·一个简单的酒店系统的数据库设计
·sqlldr使用小结
·使用DatabaseMetaDate获取数据库信息
·WindowsXP+IIS+PHP5+MySQL5+Zend+GD库+phpMyAdmin+PHPWind 5.3 安装教程
·Delphi程序执行时实时生成报表
·图片保存到数据库和从数据库读取图片并显示(c#)
·VB.NET的数据库基础编程(1)
·SQL查询语句精华使用简要
·如何实现将vsflexgrid中修改的数据反馈到数据库中
·SQL优化34条
·SQL 新增/修改 表字段列的类型等
·还原数据库的经典做法
·通过分析SQL语句的执行计划优化SQL(二)
·通过Remoting service上传文件
·sql删除记录

SQLPlus技巧 指定缺省的编辑脚本的目录

日期:2007年7月8日 作者: 查看:[大字体 中字体 小字体]


本文从多个方面讲述了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

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; 
... 
spool off

在上面的例子中,通过%ORACLE_SID%的方式引用环境变量ORACLE_SID的值,如果ORACLE_SID的值为orcl,则生成的spool文件名为:orcl.txt。

在UNIX中:

spool c:\temp\$ORACLE_SID.txt 
select * from dept; 
... 
spool off

在上面的例子中,通过$ORACLE_SID的方式引用环境变量ORACLE_SID的值,如果ORACLE_SID的值为orcl,则生成的spool文件名为:orcl.txt。

5.如何指定缺省的编辑脚本的目录:

在sql*plus中,可以用save命令,将上一条执行的sql语句保存到一个文件中,但是如何设置该文件的缺省目录呢?

通过SQL> set editfile c:\temp\file.sql 命令,可以设置其缺省目录为c:\tmpe,缺省文件名为file.sql。

6.如何除去表中相同的行:

找到相同的行:

SELECT * FROM dept a   
WHERE ROWID <> (SELECT MAX(ROWID)
            FROM dept b
            WHERE a.deptno = b.deptno
            AND a.dname = b.dname 
                 -- Make sure all columns are compared
            AND a.loc = b.loc);

注释:

如果只找deptno列相同的行,上面的查询可以改为:

SELECT * FROM dept a   
WHERE ROWID <> (SELECT MAX(ROWID)
            FROM dept b
            WHERE a.deptno = b.deptno)
删除相同的行:
DELETE FROM dept a
WHERE ROWID <> (SELECT MAX(ROWID
FROM dept b
WHERE a.deptno = b.deptno
AND a.dname = b.dname 
-- Make sure all columns are compared
AND a.loc = b.loc);

注意:上面并不删除列值为null的行。

7.如何向数据库中插入两个单引号(’’):Insert inot dept values(35,’aa’’’’bb’,’a’’b’);。在插入时,用两个’表示一个’。

8.如何设置sql*plus的搜寻路径,这样在用@命令时,就不用输入文件的全路径。

设置SQLPATH环境变量。如:SQLPATH = C:\ORANT\DBS;C:\APPS\SCRIPTS;C:\MYSCRIPTS

9.@与@@的区别是什么?

@等于start命令,用来运行一个SQL脚本文件。

@命令调用当前目录下的,或指定全路径,或可以通过SQLPATH环境变量搜寻到的脚本文件。

@@用在脚本文件中,用来指定用@@执行的文件与@@所在的文件在同一目录,而不用指定全路径,也不从SQLPATH环境变量指定的路径中寻找文件,该命令一般用在嵌套脚本文件中。

10.&与&&的区别

&用来创建一个临时变量,每当遇到这个临时变量时,都会提示你输入一个值。

&&用来创建一个持久变量,就像用用define命令或带new_vlaue字句的column命令创建的持久变量一样。当用&&命令引用这个变量时,不会每次遇到该变量就提示用户键入值,而只是在第一次遇到时提示一次。

如,将下面三行语句存为一个脚本文件,运行该脚本文件,会提示三次,让输入deptnoval的值:

select count(*) from emp 
where deptno = &deptnoval;
select count(*) from emp 
where deptno = &deptnoval;
select count(*) from emp 
where deptno = &deptnoval;

将下面三行语句存为一个脚本文件,运行该脚本文件,则只会提示一次,让输入deptnoval的值:

select count(*) from emp 
where deptno = &deptnoval;
select count(*) from emp 
where deptno = &deptnoval;
select count(*) from emp 
where deptno = &deptnoval;

11.引入copy的目的:

Copy命令在两个数据库之间拷贝数据时特别有用,特别是该命令可以在两个数据库之间传递long型字段的数据。

缺点:

在两个数据库之间传递数据时,有可能丢失精度(lose precision)。

12.问什么在修改大量的行时,我的脚本会变得很慢?

当通过PL/SQL块修改一个表中的许多行时,你会创建在表上创建一个cursor,但是只有在你关闭cursor时,才会释放ROLLBACK SEGMENT,这样,当cursor仍然打开时,修改过程会变慢,这是因为数据库不得不搜寻大量的rollback segment以便于维护读一致性。为了避免这样情况,试着在表上加一个标志字段来描述该行是否已经被修改,然后关闭该cursor,然后再打开该cursor。每次可以修改5000行。

(出处:清风网络学院






上一篇:通过Backup Exec实施Oracle来灾难恢复

下一篇:帮你解决Oracle 9i和Tomcat的端口冲突

SQLPlus技巧 指定缺省的编辑脚本的目录 相关文章:
·电脑高手的140个电脑技巧
·《拳皇2002》隐藏超杀出招表 - 技巧心得
·楼梯的上做爱技巧 (图)
·太阁立志传4 攻略及技巧
·新出QQ技巧十六招
·WindowsXP超级技巧
·Vista系统使用技巧总结
·Windows XP的20个超级实用技巧大全
·绝对好用的注册表技巧
·Photoshop十余种漂亮照片边框简单制作技巧
SQLPlus技巧 指定缺省的编辑脚本的目录 相关软件:
·招聘面试技巧 视频教程
·中文版Excel 2003实例与技巧
·交际-电话沟通技巧
·摄影技巧与欣赏
·中文版 AutoCAD2004 应用实例与技巧
·电脑技巧精彩文章一百篇
·与客户有效沟通的N个技巧
·Photshop照片润饰技巧
·功能较强的一个FLASH编辑器
·Lrc歌词编辑器2007 V1017(加强版)

特别声明:本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。
[打印本页] [关闭窗口] 转载请注明来源:http://www.vipcn.net
| 帮助(?) | 版权声明 | 友情连接 | 关于我们 | 信息发布
Copyright 2007 www.vipcn.net All Rights Reserved. 鄂ICP备05000083号Powered by:viphot