sql6

[Q]怎么样实现分组取前N条记录 
[A]8i以上版本,利用分析函数 
如获取每个部门薪水前三名的员工或每个班成绩前三名的学生。 
Select * from  
(select depno,ename,sal,row_number() over (partition by depno 
     order by sal desc) rn  
from emp) 
    where rn<=3 
  
[Q]怎么样把相邻记录合并到一条记录 
[A]8i以上版本,分析函数lag与lead可以提取后一条或前一天记录到本记录。 
Select deptno,ename,hiredate,lag(hiredate,1,null) over 
          (partition by deptno order by hiredate,ename) last_hire 
from emp 
     order by depno,hiredate 
  
[Q]如何取得一列中第N大的值? 
[A]select * from  
(select t.*,dense_rank() over (order by t2 desc) rank from t)  
where rank = [$N] 
  
[Q]怎么样把查询内容输出到文本 
[A]用spool如 
如sqlplus –s  " / as sysdba" <<EOF 
set heading off 
set feedback off 
spool temp.txt 
  select * from tab; 
   dbms_output.put_line(‘test’); 
spool off 
exit 
EOF 
  
[Q] 如何在SQL*PLUS环境中执行OS命令? 
[A] 比如进入了SQLPLUS,启动了数据库,忽然想起监听还没有启动,此时不用退出SQLPLUS,也不用另外起一个命令行窗口,直接输入:  
SQL> host lsntctl start  
或者unix/linux平台下 
SQL>!<OS command> 
windows平台下 
SQL>$<OS command> 
总结:HOST <OS command>可以直接执行OS命令。  
备注:cd命令无法正确执行。 
  
[Q]怎么设置存储过程的调用者权限 
[A]普通存储过程都是所有者权限,如果想设置调用者权限,请参考如下语句 
create or replace 
    procedure ……() 
AUTHID CURRENT_USER 
    As 
     begin 
…… 
     end;

  

你可能感兴趣的:(sql,windows,linux,unix,OS)