别人写出的东西不一定好用,而且以后再遇到问题你还是解决不了,因此,我建议你先看看有关这方面的书籍,比如:《ORACLE8 PL/SQL程序设计》
解决方案 »
- 求解查询符合条件的最后一条记录
- 一个oracle 小语句
- win2003 DataCenter Edition+oracle 9i中 错误1053:服务没有及时响应启动或控制请求
- 该表空间中已存在一个或多个数据文件,是否重复使用已存在的数据文件?
- 搞oracle的请进,谢谢!!
- 一个存储过程执行完并且提交了,没有得到结果,好奇怪!!
- 存储过程中如何编写扩大表空间的代码?
- sql server爱好者-------oracle初学者问题,来者有分
- 【触发器】如何用实现在Oracle下同步存储数据到SQLServer
- 在安装完了oracle9i,还要不要安别的什么阿?(新手问题,今天晚8点结贴)
- linux 7.2下Oracle8i的Pro*c编译环境
- 求教一个比较棘手的问题
2、把这些找出来的记录按照不同部门Department进行累加Score,然后去表AA中进行读下一个人的area和BH,重新进行。完成后把结果插到表CC中去。另:表结构设计不合理,重新设计如下:
AA(地区号,地区名称)
BB(人员编号,姓名,出生日期,地区编号,每个人的总分)
CC(部门编号,部门名称,日期,部门的总分)
DD(人员编号,部门编号) --此处设计主要是多对多关系
首先非常感谢你给我回复
我这个表 你说重新设计一下,是不可以的。因为这里面你说的DD表里面的人员编号和部门编号没有必然的联系。
因为人员都是外部的,我这系统已经用上了。我要得出的是在一个时间段内再表AA进行过其他操作的人,各部门对他们分别处罚了多少分。
看你自己叙述的逻辑很清楚了,完全可以自己开发。
这个用CURSOR就可以很快的实现。
create procedure get( M_RESULT out VARCHAR2 default 1,M_MSG OUT VARCHAR2,M_START_DATE IN VARCHAR2,M_END_DATE IN VARCHAR2)
as
type t is ref curosr;
v t;
str varchar2(1000);
v_score number:=0;
v_Department varchar2(20);
v_sum number;
cursor t1_sor is
select * from aa where Cdate between M_START_DATE and M_END_DATE;
cursor t2_sor(p_Area varchar2,p_bh varchar2) is
select * from bb where area=p_area and bh=p_bh order by Vdate desc;
begin
for v1_sor in t1_sor loop
str:='';
for v2_sor in t2_sor(v1_sor.area,v1_sor.bh) loop
str:=str||'select * from bb where bb_id='||v2_sor.bb_id||' union ';
v_score:=v_score+v2_sor.score;
exit when v_score=v1_sor.total_score;
end loop;
str:='select Department,sum(score) from ('||substr(str,1,lengbh(str)-7)||') group by Department';
open v for str;
loop
fetch v into v_Department,v_sum;
exit when v%notfound;
insert into CC values(v_Department,v_sum);
end loop;
close v;
end loop;
exception
when others then
M_RESULT:=-1;
end;
/