求大神写点SQL语句,简单一个存储过程,根据部门输出员工编号,员工姓名, 工资,职务,工龄就可以。

感激不尽,

--编写程序以显示各部门名称和该部门包含的员工姓名。要求使用显式的循环游标实现。
--1.还记得怎么打印九九乘法表吗?还知道什么是嵌套for循环吗?还记得外循环一次,内循环循环多次吗?
--2.用两个for来使用游标取值,先取部门表中的部门编号和部门名称的值,然后用取出来的部门编号的值在员工表中当where条件后面的条件来取同一部门下的所有的员工信息
--3.游标:首先声明两个游标,一个游标操作部门表的数据,一个游标来操作员工表的数据
declare
cursor c1 is select deptno,dname from dept;--这个游标保存的是部门编号和部门名称
cursor c2(no number) is select ename from emp where deptno=no;--这个是带有部门编号的参数游标,保存的是同一部门下面所有的员工姓名
begin
for d1 in c1 loop --d1:是for循环自带的特点:允许用户自己任意输入的行变量的名字,而不用写行变量的声明,for循环自己会定义 in:是关键字 c1:是游标
dbms_output.put_line('部门编号: '||d1.deptno || '部门名称: '||d1.dname );--取值:行变量.列名
for e1 in c2(d1.deptno) loop --e1:是for循环自带的特点:允许用户自己任意输入的行变量的名字,而不用写行变量的声明,for循环自己会定义 in:是关键字 c2:是带参数的游标
--还记得调用一个带参数的方法,它的参数是可以直接在那个方法中直接使用,而不需要再定义的吗?
dbms_output.put_line('员工' || c2%rowcount ||'的名字: ' || e1.ename);
end loop ;
end loop ;
end ;
温馨提示:答案为网友推荐,仅供参考
第1个回答  2016-07-22
--这个存储过程很简单啊,貌似只需要一个语句,传一个参数就能实现

追问

上课没听过。。。实训懵逼。。。

写的都有BUG

追答--明天给你弄吧,也许等会就有人给你写

追问

谢谢了。

追答--其实一条语句就完成了,非要写存储过程,是用在软件中?

追问

老师要求。。。所以要有个及格分

追答--那个工龄,表中没给这个字段啊?

追问

那个在员工里面,截图把这个没截进去

追答--哦 ,好的
--还有就是那个输入的部门是部门名称 还是部门编号  ?

追问

名称,

追答if (exists(select * from sysobjects where name ='proc_bumen'))
drop proc proc_bumen
go 
create proc proc_bumen
@bumen char(20)
as
select c.部门名称,a.员工编号,a.员工姓名,a.工资情况,b.职务,a.工龄 from 员工 a  left join (select 员工编号,职务 from 担当职务) b on a.员工编号=b.员工编号 right join (select 部门名称,部门编号 from 部门 where 部门名称=@bumen) c  on a.部门编号=c.部门编号
go
exec proc_bumen '技术部'

追问

非常谢谢,辛苦了

本回答被提问者和网友采纳