pl/sql中游标的使用

csu周 2009-02-09 03:53:32
假设有一个employee表,编写一个PL/SQL 程序块,以提升两个资格最老的"职员"为 "高级职员";(用到游标,Thank you)
...全文
118 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
clj0609 2009-02-11
  • 打赏
  • 举报
回复
如果你是想练习游标的使用我没什么意见。不过要完成你的要求,确实用游标是判断资格最老有点麻烦。
资格老就是指雇佣时间长呗,那就是越早就越资格老。那就对雇佣时间直接排序就好了。
csu周 2009-02-09
  • 打赏
  • 举报
回复
6楼的兄弟,好像不可以呀,因为那个order by board_date desc好像没管用,还是按编号排的
willflyz 2009-02-09
  • 打赏
  • 举报
回复
呵呵,2楼的回答很简洁.支持,
可以用下面的试一下,用3楼的表结构.

begin
for c in select Rowid from employee
where rownum < 3
order by board_date desc
loop
update employee set level_info='Senior Employee' where rowid = c.rowid;
end;
commit;
end;
csu周 2009-02-09
  • 打赏
  • 举报
回复
laoding_dmf1982的兄弟,太感谢了,真的十分感谢!
不过你的代码出了一个小小的毛病,比如:第一个时间为20080109,第二个时间为20080110,第三个时间为20080102那它修改的员工为第三个和第二个,但实际上应该修改第一个和第三个。不过已经很感谢你了,我再想想吧!
csu周 2009-02-09
  • 打赏
  • 举报
回复
laoding_dmf1982的兄弟,太感谢了,真的十分感谢!
不过你的代码出了一个小小的毛病,比如:第一个时间为20080109,第二个时间为20080110,第三个时间为20080102那它修改的员工为第三个和第二个,但实际上应该修改第一个和第三个。不过已经很感谢你了,我再想想吧!
laoding_dmf1982 2009-02-09
  • 打赏
  • 举报
回复
create table employee(id number(3),name varchar2(100),board_date date,level_info varchar2(100));

insert into employee values(1,'aa',to_date('20080202','YYYYMMDD'),'');

insert into employee values(2,'bb',to_date('20080402','YYYYMMDD'),'');

insert into employee values(3,'cc',to_date('20080602','YYYYMMDD'),'');

insert into employee values(4,'dd',to_date('20080802','YYYYMMDD'),'');

insert into employee values(5,'ee',to_date('20080202','YYYYMMDD'),'');

declare
emp_rec employee%rowtype;
Cursor emp_cur is select * from employee;
first_id number(3);
second_id number(3);
first_date date;
second_date date;
first_name varchar2(100);
second_name varchar2(100);
begin
first_date:=sysdate;
second_date:=sysdate;
first_id:=0;
second_id:=0;
first_name:='';
second_name:='';
open emp_cur;
loop
fetch emp_cur into emp_rec;
exit when emp_cur%notfound;
if(emp_rec.board_date<first_date) then
first_date:=emp_rec.board_date;
first_id:=emp_rec.id;
first_name:=emp_rec.name;
elsif(emp_rec.board_date=first_date) then
second_date:=emp_rec.board_date;
second_id:=emp_rec.id;
second_name:=emp_rec.name;
elsif(emp_rec.board_date<second_date) then
second_date:=emp_rec.board_date;
second_id:=emp_rec.id;
second_name:=emp_rec.name;
end if;
end loop;
close emp_cur;
if first_id>0 then
update employee set level_info='Senior Employee' where id=first_id;
dbms_output.put_line('Employee '||first_name||' has been prompted as Senior Employee');
end if;
if second_id>0 then
update employee set level_info='Senior Employee' where id=second_id;
dbms_output.put_line('Employee '||second_name||' has been prompted as Senior Employee');
end if;
end;
mantisXF 2009-02-09
  • 打赏
  • 举报
回复
(ORDER BY 工作经验 DESC)-> (ROWNUM <= 2)
[Quote=引用楼主 xiaotianwang0702 的帖子:]
假设有一个employee表,编写一个PL/SQL 程序块,以提升两个资格最老的"职员"为 "高级职员";(用到游标,Thank you)
[/Quote]
wangxuhero 2009-02-09
  • 打赏
  • 举报
回复
你没给出表结构和信息。
基本思路就是取出两个资格最老的职员,然后update就可以了。

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧