Oracle游标练习题

按工号从小到大的顺序输出雇员名字、工资以及工资与平均工资的差。

declare
v_ename emp.ename%type;
v_sal emp.sal%type;
v_avgsal number;
cursor cur1 is select ename,sal,round(sal-avgsal) from emp,(select avg(sal) avgsal from emp) a order by empno;
begin
open cur1;
loop
fetch cur1 into v_ename,v_sal,v_avgsal;
exit when cur1%notfound;
dbms_output.put_line(v_ename||''||v_sal||''||v_avgsal);
end loop;
close cur1;
end;

为所有雇员增加工资,工资在1000以内的增加30%,在1000-2000增加20%,2000以上增加10%。

declare
cursor cur2 is select empno,sal from emp;
v_empno emp.empno%type;
v_sal emp.sal%type;
begin
open cur2;
 loop
fetch cur2 into v_empno,v_sal;
exit when cur2%notfound;
 if v_sal<1000 then
  update emp set sal=sal*1.3 where empno=v_empno;
 dbms_output.put_line('雇员名:'||v_empno||'原工资'||v_sal||'新工资'||v_sal*1.3);
elsif v_sal>2000 then
 update emp set sal=sal*1.1 where empno=v_empno;
 dbms_output.put_line('雇员名:'||v_empno||'原工资'||v_sal||'新工资'||v_sal*1.1);
 else
update emp set sal=sal*1.2 where empno=v_empno;
 dbms_output.put_line('雇员名:'||v_empno||'原工资'||v_sal||'新工资'||v_sal*1.2);
 end if;
end loop;
close cur2;
 end;

统计输出部门名称、部门总人数、总工资及部门经理。

declare
v_deptno number;
v_dept_name varchar2(20);
v_count number;
v_count_sal number;
v_dept_manager varchar2(20);
cursor c_dept is select deptno,count(*),sum(sal) from emp group by deptno;
begin
open c_dept;
loop
fetch c_dept into v_deptno,v_count,v_count_sal;
exit when c_dept%notfound;
select dname into v_dept_name from dept where deptno = v_deptno;
select ename into v_dept_manager from emp where deptno = v_deptno and job = 'MANAGER';
dbms_output.put_line(rpad(v_dept_name,15)||rpad(v_count,6)||rpad(v_count_sal,10)||rpad(v_dept_manager,6));
end loop;
close c_dept;
end;

显示工资最高的前3名雇员的名称和工资。

declare
cursor cur4 is
select sal,ename from
(select sal,ename from emp order by sal desc) where rownum<=3;
v_sal emp.sal%type;
v_ename emp.ename%type;
begin
open cur4;
loop
fetch cur4 into v_sal,v_ename;
exit when cur4%notfound;
dbms_output.put_line(rpad(v_Sal,5)||rpad(v_ename,8));
end loop;
close cur4;
end;

项目中想实现excel图表但POI不支持所以想到了这个方法。放上来抛砖引玉,感兴趣的欢迎大家交流 注:-------------------------------------------------------------------------- 其实现原理和利用JavaScript实现客户端绘图完全一样。后台代码将输入 写入特定区域,前端脚本在页面载入时执行脚本绘图。大家都是做B/S开发 的,这方面的只是不需要我多说了吧。 如果我们让一个HTML页面在载入时显示一个提示框用后台编程是不现实的 所以我们就动态生成一段JS: window.onload=function(){ ...... } 用Java输出图表的场景和这个一样,POI、JXL对操作Excel图表无能为力 但Excel支持脚本的,也有工作表载入事件,所以也可以用同样的原理实现 只不过这次客户端不再是浏览器而是Excel应用程序。 这样交代的应该比较明白了吧,请不要再留言抱怨没有Java代码了,因为 这根本跟java代码没多大关系,后台的代码所做的工作仅仅是写入必要的 数据,数据的解析和绘图操作是在VBA中完成的 ---2009-12-18 今天查找资料翻出来了这段代码,发现里边的类确实是空的,我说怎么总挨骂 呢,当时肯定打包的时候晕透了把另一个本该删除的类打包进去了。我无法 替换文件只能把java代码贴上来了,请自己修改模板文件的路径。 package com.test.poi; import java.io.FileInputStream; import java.io.FileOutputStream; import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.poifs.filesystem.POIFSFileSystem; public class PoiChart { public static void main(String[] args){ try{ POIFSFileSystem fs=new POIFSFileSystem(new FileInputStream("E:/王建波_bak/我的练习/Module.xls")); HSSFWorkbook wb=new HSSFWorkbook(fs); HSSFSheet sheet=wb.getSheetAt(0); HSSFRow row; //写入表头 String[] aTblHeaders=new String[]{ "姓名","语文","数学","英语" }; row=sheet.createRow(0); for(int i=0,len=aTblHeaders.length;i<len;i++){ row.createCell((short)i).setCellValue(aTblHeaders[i]); } //向模板中写入数据 String[] aNames=new String[]{ "张飞","刘备","关羽","曹操","孙权","吕布" }; for(int i=0,nRowLen=aNames.length;i<nRowLen;i++){ row=sheet.createRow(i+1); row.createCell((short)0).setCellValue(aNames[i]); for(int j=1,nColLen=aTblHeaders.length;j<nColLen;j++){ row.createCell((short)j).setCellValue(Math.floor(Math.random()*100)); } } //输出文件 FileOutputStream fout=new FileOutputStream("d:/chart.xls"); wb.write(fout); fout.close(); }catch(Exception e){ e.printStackTrace(); } } }
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值