服务器 频道

sql*plus使用的一些技巧

  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的行。
  
0
相关文章