动态网站制作指南 [  QQ表情  ]
[ 投票调查 ]
[ 企业邮箱 ]
[ 网站空间 ]
网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
ASP源码 | .Net源码 | PHP源码 | JSP源码 | JAVA源码 | CGI源码 | VB源码 | C++源码 | Delphi源码 | PB源码 | VF源码 | 汇编 | 服务器
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > 数据库 > Oracle教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
数据库:数据库教程,数据库技巧,Oracle教程,MySQL教程,Sybase教程,Access教程,DB2教程,数据库安全,数据库文摘
文章搜索服务
邮件订阅
输入你的邮件地址,
你将不会错过任何关于:
[ Oracle教程 ]的信息

本月文章推荐
.Oracle RAC中Srvctl命令详细说明.
.在linux下安装0racle 10g的艰难之.
.Oracle Database 10g:最佳新特性.
.Oracle中Trigger例子1.
.名字中包含了什么?:改善的表空.
.Oracle Application Serve.
.9i中一个特殊等待事件--null eve.
.从黑客角度检验oracle数据库.
.oracle 9i 的内存泄漏问题.
.Oracle数据库诊断案例-redo log日.
.chapter3:Oracle Enterprise Man.
.详细讲解Oracle在Solaris下的性能.
.TestKing Oracle 1z0-501 V3.
.Oracle数据库SQLPLUS中几个常用s.
.裸设备和Oracle问答20例.
.经验总结:一次Oracle数据库冷备.
.有关CBO优化的几个问题.
.在.NET中调用Oracle9i存储过程经.
.杜绝安全隐患 容易忽视Oracle安全.
.對COLUMNS_UPDATED()返回值的解析.

Sql*plus技巧之SPOOL应用

发表日期:2008-2-9 |


    Sql*plus中蕴藏着好多技巧,假如把握这些技巧,对于在Oracle数据库下进行快速开发与有效维护数据库都是有益的。下面就介绍一二:   1.使用SQL*PLUS动态生成批量脚本   将spool与select命令结合起来使用,可以生成一个脚本,脚本中包含有可以批量执行某一任务的语句。   例1:   生成一个脚本,删除SCOTT用户下的所有的表:   a. 创建gen_drop_table.sql文件,包含如下语句: Sql*plus技巧之SPOOL应用SPOOL c:drop_table.sql Sql*plus技巧之SPOOL应用SELECT ''''DROP TABLE '''' table_name '''';'''' FROM user_tables; Sql*plus技巧之SPOOL应用SPOOL OFF   b. 以SCOTT用户登录数据库 Sql*plus技巧之SPOOL应用SQLPLUS > @ …..gen_dorp_table.sql   c. 在c盘根目录下会生成文件drop_table.sql文件,包含删除所有表的语句,如下所示: Sql*plus技巧之SPOOL应用SQL> SELECT ''''DROP TABLE '''' table_name '''';'''' FROM user_tables; Sql*plus技巧之SPOOL应用 Sql*plus技巧之SPOOL应用''''DROPTABLE''''TABLE_NAME'''';'''' Sql*plus技巧之SPOOL应用-------------------------------------------------------------------------------- Sql*plus技巧之SPOOL应用DROP TABLE DEPT; Sql*plus技巧之SPOOL应用DROP TABLE EMP; Sql*plus技巧之SPOOL应用DROP TABLE PARENT; Sql*plus技巧之SPOOL应用DROP TABLE STAT_VENDER_TEMP; Sql*plus技巧之SPOOL应用DROP TABLE TABLE_FORUM; Sql*plus技巧之SPOOL应用 Sql*plus技巧之SPOOL应用5 rows selected. Sql*plus技巧之SPOOL应用 Sql*plus技巧之SPOOL应用SQL> SPOOL OFF
  d. 对生成的drop_table.sql文件进行编辑去掉不必要的部分,只留下drop table …..语句   e. 在scott用户下运行dorp_table.sql文件,删除scott用户下所有的表。 Sql*plus技巧之SPOOL应用SQLPLUS > @ c:dorp_table.sql   在上面的操作中,在生成的脚本文件中会有多余的字符,如运行的sql语句,标题,或返回的行数,需要我们编辑该脚本后再运行,给实际的操作带来诸多不便。懒惰是人的本性,这促使我们用更简单的办法来实现上面的任务。   a. 创建gen_drop_table.sql文件,包含如下语句: Sql*plus技巧之SPOOL应用set echo off Sql*plus技巧之SPOOL应用set feedback off Sql*plus技巧之SPOOL应用set newpage none Sql*plus技巧之SPOOL应用set pagesize 5000 Sql*plus技巧之SPOOL应用set linesize 500 Sql*plus技巧之SPOOL应用set verify off Sql*plus技巧之SPOOL应用set pagesize 0 Sql*plus技巧之SPOOL应用set term off Sql*plus技巧之SPOOL应用set trims on Sql*plus技巧之SPOOL应用set linesize 600 Sql*plus技巧之SPOOL应用set heading off Sql*plus技巧之SPOOL应用set timing off Sql*plus技巧之SPOOL应用set verify off Sql*plus技巧之SPOOL应用set numwidth 38 Sql*plus技巧之SPOOL应用SPOOL c:\drop_table.sql Sql*plus技巧之SPOOL应用SELECT 'DROP TABLE ' table_name ';' FROM user_tables; Sql*plus技巧之SPOOL应用SPOOL OFF
  b. 以SCOTT用户登录数据库 Sql*plus技巧之SPOOL应用SQLPLUS > @ …..gen_dorp_table.sql   c. 在c盘根目录下会生成文件drop_table.sql文件,包含删除所有表的语句,如下所示: Sql*plus技巧之SPOOL应用 DROP TABLE DEPT; Sql*plus技巧之SPOOL应用DROP TABLE EMP; Sql*plus技巧之SPOOL应用DROP TABLE PARENT; Sql*plus技巧之SPOOL应用DROP TABLE STAT_VENDER_TEMP; Sql*plus技巧之SPOOL应用DROP TABLE TABLE_FORUM;   d. 在scott用户下运行dorp_table.sql文件,删除scott用户下所有的表。 Sql*plus技巧之SPOOL应用SQLPLUS > @ c:\dorp_table.sql   2.将一个表中的数据导出生成一个文本文件,列与列之间以”,”隔开 Sql*plus技巧之SPOOL应用set echo off Sql*plus技巧之SPOOL应用set feedback off Sql*plus技巧之SPOOL应用set newpage none Sql*plus技巧之SPOOL应用set pagesize 5000 Sql*plus技巧之SPOOL应用set linesize 500 Sql*plus技巧之SPOOL应用set verify off Sql*plus技巧之SPOOL应用set pagesize 0 Sql*plus技巧之SPOOL应用set term off Sql*plus技巧之SPOOL应用set trims on Sql*plus技巧之SPOOL应用set linesize 600 Sql*plus技巧之SPOOL应用set heading off Sql*plus技巧之SPOOL应用set timing off Sql*plus技巧之SPOOL应用set verify off Sql*plus技巧之SPOOL应用set numwidth 38 Sql*plus技巧之SPOOL应用SPOOL c:\drop_table.sql Sql*plus技巧之SPOOL应用 select DEPTNO ',' DNAME FROM DEPT; Sql*plus技巧之SPOOL应用 SPOOL OFF
  将上面的内容保存为一个文本文件后,的XM}`S!;网(J以scott登录,执行该文件后显示结果: Sql*plus技巧之SPOOL应用10,ACCOUNTING Sql*plus技巧之SPOOL应用20,RESEARCH Sql*plus技巧之SPOOL应用30,SALES Sql*plus技巧之SPOOL应用40,OPERATIONS   通过上面的两个例子,我们可以将: Sql*plus技巧之SPOOL应用set echo off Sql*plus技巧之SPOOL应用set feedback off Sql*plus技巧之SPOOL应用set newpage none Sql*plus技巧之SPOOL应用set pagesize 5000 Sql*plus技巧之SPOOL应用set linesize 500 Sql*plus技巧之SPOOL应用set verify off Sql*plus技巧之SPOOL应用set pagesize 0 Sql*plus技巧之SPOOL应用set term off Sql*plus技巧之SPOOL应用set trims on Sql*plus技巧之SPOOL应用set linesize 600 Sql*plus技巧之SPOOL应用set heading off Sql*plus技巧之SPOOL应用set timing off Sql*plus技巧之SPOOL应用set verify off Sql*plus技巧之SPOOL应用set numwidth 38 Sql*plus技巧之SPOOL应用SPOOL c:\具体的文件名 Sql*plus技巧之SPOOL应用 你要运行的sql语句 Sql*plus技巧之SPOOL应用 SPOOL OFF
  作为一个模版,只要将必要的语句假如这个模版就可以了。   在oracle的较新版本中,还可以用set colsep命令来实现上面的功能: Sql*plus技巧之SPOOL应用SQL> set colsep , Sql*plus技巧之SPOOL应用SQL> select * from dept; Sql*plus技巧之SPOOL应用 10,ACCOUNTING ,NEW YORK Sql*plus技巧之SPOOL应用 20,RESEARCH ,DALLAS Sql*plus技巧之SPOOL应用 30,SALES ,CHICAGO Sql*plus技巧之SPOOL应用 40,OPERATIONS ,BOSTON Sql*plus技巧之SPOOL应用 35,aa ,bb   3.动态生成spool命令所需的文件名   在我们上面的例子中,spool命令所需要的文件名都是固定的。有时我们需要天天spool一次,并且每次spool的文件名都不相同,如文件名包含当天的日期,该如何实现呢? Sql*plus技巧之SPOOL应用column dat1 new_value filename; Sql*plus技巧之SPOOL应用select to_char(sysdate,'yyyymmddhh24mi') dat1 from dual; Sql*plus技巧之SPOOL应用spool c:\&&filename..txt Sql*plus技巧之SPOOL应用select * from dept; Sql*plus技巧之SPOOL应用spool off;   4.如何从脚本文件中得到WINDOWS环境变量的值:   在windos中: Sql*plus技巧之SPOOL应用 spool c:\temp\%ORACLE_SID%.txt Sql*plus技巧之SPOOL应用 select * from dept; Sql*plus技巧之SPOOL应用 ... Sql*plus技巧之SPOOL应用 spool off
  在上面的例子中,通过%ORACLE_SID%的方式引用环境变量ORACLE_SID的值,假如ORACLE_SID的值为orcl,则生成的spool文件名为:orcl.txt   在UNIX中: Sql*plus技巧之SPOOL应用spool c:\temp\ORACLE_SID.txt Sql*plus技巧之SPOOL应用 select * from dept; Sql*plus技巧之SPOOL应用 ... Sql*plus技巧之SPOOL应用 spool off   在上面的例子中,通过ORACLE_SID的方式引用环境变量ORACLE_SID的值,假如ORACLE_SID的值为orcl,则生成的spool文件名为:orcl.txt   5.如何指定缺省的编辑脚本的目录   在sql*plus中,可以用save命令,将上一条执行的sql语句保存到一个文件中,但是如何设置该文件的缺省目录呢?   通过SQL> set editfile c:tempfile.sql 命令,可以设置其缺省目录为c:tmpe,缺省文件名为file.sql。   6.如何除去表中相同的行   找到相同的行: Sql*plus技巧之SPOOL应用SELECT * FROM dept a Sql*plus技巧之SPOOL应用WHERE ROWID <> (SELECT MAX(ROWID) Sql*plus技巧之SPOOL应用 FROM dept b Sql*plus技巧之SPOOL应用 WHERE a.deptno = b.deptno Sql*plus技巧之SPOOL应用 AND a.dname = b.dname -- Make sure all columns are compared Sql*plus技巧之SPOOL应用 AND a.loc = b.loc);   注释:   假如只找deptno列相同的行,上面的查询可以改为: Sql*plus技巧之SPOOL应用SELECT * FROM dept a Sql*plus技巧之SPOOL应用WHERE ROWID <> (SELECT MAX(ROWID) Sql*plus技巧之SPOOL应用 FROM dept b Sql*plus技巧之SPOOL应用 WHERE a.deptno = b.deptno)
  删除相同的行: Sql*plus技巧之SPOOL应用DELETE FROM dept a Sql*plus技巧之SPOOL应用WHERE ROWID <> (SELECT MAX(ROWID Sql*plus技巧之SPOOL应用 FROM dept b Sql*plus技巧之SPOOL应用 WHERE a.deptno = b.deptno Sql*plus技巧之SPOOL应用 AND a.dname = b.dname -- Make sure all columns are compared Sql*plus技巧之SPOOL应用 AND a.loc = b.loc);   注重:上面并不删除列值为null的行。   7.如何向数据库中插入两个单引号(’’) Sql*plus技巧之SPOOL应用Insert inot dept values(35,’aa’’’’bb’,’a’’b’);   在插入时,用两个’表示一个’。   8.如何设置sql*plus的搜寻路径,这样在用@命令时,就不用输入文件的全路径。   设置SQLPATH环境变量。   如: Sql*plus技巧之SPOOL应用SQLPATH = C:\ORANT\DBS;C:\APPS\SCRIPTS;C:\MYSCRIPTS   9.@与@@的区别是什么?   @等于start命令,用来运行一个sql脚本文件。   @命令调用当前目录下的,或指定全路径,或可以通过SQLPATH环境变量搜寻到的脚本文件。   @@用在脚本文件中,用来指定用@@执行的文件与@@所在的文件在同一目录,而不用指定全路径,也不从SQLPATH环境变量指定的路径中寻找文件,该命令一般用在嵌套脚本文件中。   10.&与&&的区别   &用来创建一个临时变量,每当碰到这个临时变量时,都会提示你输入一个值。   &&用来创建一个持久变量,就像用用define命令或带new_vlaue字句的column命令创建的持久变量一样。当用&&命令引用这个变量时,不会每次碰到该变量就提示用户键入值,而只是在第一次碰到时提示一次。
  如,将下面三行语句存为一个脚本文件,运行该脚本文件,会提示三次,让输入deptnoval的值: Sql*plus技巧之SPOOL应用select count(*) from emp where deptno = &deptnoval; Sql*plus技巧之SPOOL应用select count(*) from emp where deptno = &deptnoval; Sql*plus技巧之SPOOL应用select count(*) from emp where deptno = &deptnoval;   将下面三行语句存为一个脚本文件,:RY7供0管k网[运行该脚本文件,则只会提示一次,让输入deptnoval的值: Sql*plus技巧之SPOOL应用select count(*) from emp where deptno = &deptnoval; Sql*plus技巧之SPOOL应用select count(*) from emp where deptno = &deptnoval; Sql*plus技巧之SPOOL应用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行。
上一篇:Oracle 8i中回滚段使用和ORA-1555 人气:546
下一篇:利用外部命令Oralce数据库导入导出 人气:1249
浏览全部Oracle教程的内容 Dreamweaver插件下载 常用网页广告代码全集
  最新网站源码 最新软件下载
2008-10-7 Web Wiz Forums(论坛系统) v9.53
2008-10-7 Web Wiz Forums(论坛系统) v9.53
2008-10-7 Web Wiz Forums(论坛系统) v9.53
2008-10-7 HDWiki v4.0.1 bulid 081007 UTF
2008-10-7 迅易评选投票管理系统 v10.0
2008-10-7 HDWiki v4.0.1 bulid 081007 GBK
2008-10-7 Bitrac单用户博客 v1.14 bulid 0
2008-10-7 OpenX(广告管理系统) v2.6.2 多国
2008-10-7 乐铺网店系统免费普及版 v3.41
2008-9-29 酷狗音乐(原KuGoo)2008 v5.310 正
2008-9-29 QQTab 1.1
2008-9-29 网络传送带 Net Transport 2.64a
2008-9-29 谷歌金山词霸v1.8
2008-9-29 TweakVI 1.0 Build 1090
2008-9-29 ACDSee Pro 2.5 Build 333 汉化绿
2008-9-29 Winamp v5.541(2189) 周明波简体
2008-9-27 CCleaner 2.12.651
2008-9-27 Mozilla Thunderbird 2.0.0.17 英
  发表评论
姓 名: 验证码:
内 容:
站长工具:网站收录查询 | Google PR查询 | ALEXA排名查询 | CSS在线编辑器 | 广告代码 | js/vbs加密 | md5加密 | 进制转换 | UTF-8 转换工具 | Html转换js | Html转换asp | Html转换php | Html转换perl
实用工具:汉字翻译拼音 | 拼音字典 | 符号对照表 | 个税计算 | 实时汇率查询换算 | 经典小工具 | 汉字简繁转换 | 普通单位换算 | 公制单位换算 | 生辰老黄历 | 国内电话区号 | 国家代码与域名缩写 | 文字加密解密 | 健康查询 | 万年历 | 汉字横竖排版 | 手机号码查询 | 计算器 | ip搜索
业务联系 | 广告刊登 | 频道合作 | 投稿荐稿 | 联系方式 | 加入收藏 | RSS订阅
Copyright © 2000-2008 www.knowsky.com All rights reserved | 网络实名:动态网站制作指南 | 沪ICP备05001343号
ホームページ制作 不動産検索システム 求人情報
防水工事·改修工事 フットサル大会 探偵
SEO対策 中国語教室 ホームページ作成