sql*plus使用的一些技巧
发布时间:2018-09-15 22:30:47 所属栏目:电商 来源:站长网
导读:sql*plus行使的一些能力Sql*plus中储藏着许多几何能力,假如把握这些能力,对付在oracle数据库下举办快速开拓与有用维护数据库都是有益的。 下面就接管一二, 1.行使SQL*PLUS动态天生批量剧本将spool与select呼吁团结起来行使,可以天生一个剧本,剧本中包括
sql*plus行使的一些能力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.sqlc. 在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 offset feedback offset newpage noneset pagesize 5000set linesize 500set verify offset pagesize 0set term offset trims onset linesize 600set heading off set timing offset verify offset numwidth 38SPOOL c:drop_table.sql SELECT 'DROP TABLE '|| table_name ||';' FROM user_tables; SPOOL OFF b. 以SCOTT用户登录数据库SQLPLUS > @ …..gen_dorp_table.sqlc. 在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_table.sql文件,删除scott用户下全部的表。SQLPLUS > @ c:dorp_table.sql2.将一个表中的数据导出天生一个文本文件,列与列之间以”,”离隔set echo offset feedback offset newpage noneset pagesize 5000set linesize 500set verify offset pagesize 0set term offset trims onset linesize 600set heading off set timing offset verify offset numwidth 38SPOOL c:drop_table.sql select DEPTNO || ',' || DNAME FROM DEPT; SPOOL OFF 将上面的内容生涯为一个文本文件后,以scott登录,执行该文件后表现功效:10,ACCOUNTING 20,RESEARCH 30,SALES 40,OPERATIONS 通过上面的两个例子,我们可以将:set echo offset feedback offset newpage noneset pagesize 5000set linesize 500set verify offset pagesize 0set term offset trims onset linesize 600set heading off set timing offset verify offset numwidth 38SPOOL 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 ,bb3.动态天生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.txt5.怎样指定缺省的编辑剧本的目次 在sql*plus中,可以用save呼吁,将上一条执行的sql语句生涯到一个文件中,可是怎样配置该文件的缺省目次呢?通过SQL> set editfile c:tempfile.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 aWHERE 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:ORANTDBS;C:APPS CRIPTS;C:MYSCRIPTS9.@与@@的区别是什么?@便是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行. 转此:http://www.cnoug.org/viewthread.php?tid=31451 (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |