表名:T_cmsScheme
方案编号 方案名称 单位ID 历史记录表
Fnumber Fname ForgID FHisTableName
A001 方案1 R1 T_DB_4500
A002 方案2 R1 T_DB_8872
A003 方案3 R2 T_DB_9983单位表名:T_orgAdmin
单位ID 单位编码 单位名称
ForgID ForgNumber ForgName
R1 01.01.02 一分公司_本部_人事部
R2 01.01 一分公司_本部
临时表名:T_DB_4501
期间ID 应发工资 实发工资
FPeriodID FYF001 FSF002
p1 1000 1200
p1 1400 1500
p2 2000 2100
p2 3000 3100临时表名:T_DB_8872
期间ID 应发工资 实发工资
FPeriodID FYF001 FSF002
p2 4000 3000
p2 2800 2500
p3 1000 1200
p4 1200 1300
p5 2000 2200
临时表名:T_DB_9983
期间ID 应发工资 实发工资
FPeriodID FYF001 FSF002
p2 3000 2000
p2 2300 2500
薪资期间表:T_cmpPeriod
FPeriodID FPeriodNum FPeriodName
p1 201001 201001
p2 201002 201002
p3 201003 201003
p4 201004 201004
p5 201005 201005
--存储过程输出结果集,
--条件:汇总单位编码为01.01.02且薪资期间编号在201001~201002范围内的应发工资及实发工资合计
方案编号 方案名称 单位编码 单位名称 应发工资 实发工资
Fnumber Fname ForgNumber ForgName FYF001 FSF002
A001 方案1 01.01.02 一分公司_本部_人事部 7400 7900
A002 方案2 01.01.02 一分公司_本部_人事部 6800 5500以上是该存储过程需要涉及到的表结构、测试数据及输出的结果集.
先将T_cmsScheme 和 T_orgAdmin 连接, 根据输入参数ForgNumber比较T_orgAdmin 的ForgNumber字段,筛出对应的方案,再找出这些方案的FHisTableName ,根据字段值显示的临时表名去查其期间编码在[FPrdNumFrom,FPrdNumTo]范围内的实发工资及应发工资合计值(各临时表的FPeriodID与薪资期间表T_cmpPeriod的FPeriodID字段关联),与方案一起输出一个结果集。
临时表T_DB_4500、T_DB_8872、T_DB_9983 是主表T_cmsScheme的FHisTableName值,再根据这些临时表去汇总对应字段的汇总值,合并到主表中输出。请各位高手各显神通,帮忙将存储过程写出来,非常感谢了!
方案编号 方案名称 单位ID 历史记录表
Fnumber Fname ForgID FHisTableName
A001 方案1 R1 T_DB_4500
A002 方案2 R1 T_DB_8872
A003 方案3 R2 T_DB_9983单位表名:T_orgAdmin
单位ID 单位编码 单位名称
ForgID ForgNumber ForgName
R1 01.01.02 一分公司_本部_人事部
R2 01.01 一分公司_本部
临时表名:T_DB_4501
期间ID 应发工资 实发工资
FPeriodID FYF001 FSF002
p1 1000 1200
p1 1400 1500
p2 2000 2100
p2 3000 3100临时表名:T_DB_8872
期间ID 应发工资 实发工资
FPeriodID FYF001 FSF002
p2 4000 3000
p2 2800 2500
p3 1000 1200
p4 1200 1300
p5 2000 2200
临时表名:T_DB_9983
期间ID 应发工资 实发工资
FPeriodID FYF001 FSF002
p2 3000 2000
p2 2300 2500
薪资期间表:T_cmpPeriod
FPeriodID FPeriodNum FPeriodName
p1 201001 201001
p2 201002 201002
p3 201003 201003
p4 201004 201004
p5 201005 201005
--存储过程输出结果集,
--条件:汇总单位编码为01.01.02且薪资期间编号在201001~201002范围内的应发工资及实发工资合计
方案编号 方案名称 单位编码 单位名称 应发工资 实发工资
Fnumber Fname ForgNumber ForgName FYF001 FSF002
A001 方案1 01.01.02 一分公司_本部_人事部 7400 7900
A002 方案2 01.01.02 一分公司_本部_人事部 6800 5500以上是该存储过程需要涉及到的表结构、测试数据及输出的结果集.
先将T_cmsScheme 和 T_orgAdmin 连接, 根据输入参数ForgNumber比较T_orgAdmin 的ForgNumber字段,筛出对应的方案,再找出这些方案的FHisTableName ,根据字段值显示的临时表名去查其期间编码在[FPrdNumFrom,FPrdNumTo]范围内的实发工资及应发工资合计值(各临时表的FPeriodID与薪资期间表T_cmpPeriod的FPeriodID字段关联),与方案一起输出一个结果集。
临时表T_DB_4500、T_DB_8872、T_DB_9983 是主表T_cmsScheme的FHisTableName值,再根据这些临时表去汇总对应字段的汇总值,合并到主表中输出。请各位高手各显神通,帮忙将存储过程写出来,非常感谢了!
解决方案 »
- 在sql server里面 存储过程分为系统存储过程、外部存储过程、用户存储过程 那在orcale 里 怎么分类的啊
- pl sql developer 中的表怎么导出带命令符的文本格式
- oracle 异构服务
- oracle连接sqlserver的问题
- select 连接查询两个表,并显示24小时前的数据
- 关于merge into语句的问题。。。。。。。。。。。
- 登录oracle的OMS时为什么会出现用户登录身份证明不正确
- WINXP下面安装oracle9i
- 怎么找不到表?sqlplus创建表之后,在那里能看到表呀?真菜!!!!!帮帮忙!
- 请关注:Oracle中日志的问题。
- DATE字段 取出到VARCHAR2,时分秒丢失的问题
- 怎么取 count 的值给一个int型的变量呢
-----我把那个修改了下,你打印出那个SQL看下,有没有语法错误,问题应该不大
create or replace procedure helpBswendy(ForgNum number,
FPeriodNum number,
resultSet out sys_refcursor,
o_ret number,
o_msg varchar2) as
v_FHisTableName varchar2(200);
v_sql varchar2(2000);
begin
select FHisTableName
into v_FHisTableName
from T_cmsScheme
where ForgNumber := ForgNum;
v_sql := 'select a.Fnumber,a.Fname,a.ForgNumber,a.ForgName,select sum(b.FYF001) from ' ||
v_FHisTableName || ' FYF001,select sum(b.FSF002) from ||'
v_FHisTableName
'|| FSF002 from T_cmsScheme a' || ' where a.ForgNumber=' ||
ForgNum || ' group by a.ForgNumber,a.Fnumber';
open for resultSet;
exception
when others then
o_ret := sqlcode;
o_msg := sqlerrm(sqlcode);
end;