求大神帮忙,oracle 存储过程,我有一张税率表。

这货没有昵称 2012-09-11 10:00:36
应发工资 > 1300 元部分开始计算所得税
0~ 1300 不用缴税
1300 ~ 1800 按 工资 * 5% -65
1300 ~ 3300 按 工资 * 10% -155
1300 ~ 6300 按 工资 * 15% -320
需求是这样子的,
我的表示这样子的
工资下限,工资上限,扣除数,税率

0.00 1300.00 0.00 0.00
1300.00 1800.00 65.00 0.05
1300.00 3300.00 155.00 0.10
1300.00 6300.00 320.00 0.15

求大神教导,写个存储过程,我传入一个工资进去怎么判断传入的工资属于哪个区间,多谢!求详细!
...全文
239 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
battery89 2012-09-11
  • 打赏
  • 举报
回复
我只找第一个符合item.上限-i>0,这个就是符合你的范围的,取了之后跳出循环就好了
[Quote=引用 9 楼 的回复:]
发现不对啊 。判断调教 item.上限-i>0会查出多个结果,
[/Quote]
这货没有昵称 2012-09-11
  • 打赏
  • 举报
回复
发现不对啊 。判断调教 item.上限-i>0会查出多个结果,
ORAClE SE 2012-09-11
  • 打赏
  • 举报
回复
declare
-- Local variables here
i integer;
begin
if i-1300<0 then
dbms_output.put_line('no');
return;
end if;
for item in (select * from 表) loop
if item.上限-i>=0 then
dbms_output.put_line('按这个标准交');
return;
end if;
end loop;
end;
kennyw964 2012-09-11
  • 打赏
  • 举报
回复
楼主的问题是啥,传入一个工资,判断工资属于哪个区间?
这句话怎么理解呢,首先区间指什么,0~1300是一个区间?1300~1800是另一个区间?
如果是 这样的话,还需要判断么,工资在哪个范围就属于哪个区间呗?
这货没有昵称 2012-09-11
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

SQL code
declare
-- Local variables here
i integer;
begin
if i-1300<0 then
dbms_output.put_line('no');
return;
end if;
for item in (select * from 表) loop
if item.上限-i>=0 then……
[/Quote]
我觉得这个是对的,我Oracle太菜了,我看看这个循环怎么弄到proc里面
这货没有昵称 2012-09-11
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]

应是LZ写错了吧,怎么可能一个工资(如1400)有三种税率,账务按哪个给你扣呀,呵呵
[/Quote]
没有啊。这个就是这么设定的,这样设定用一个税率就好了,1400是用1300~1800区间的税率,
2000的话就用 1300~3300的税率,这样子的。
人生无悔 2012-09-11
  • 打赏
  • 举报
回复
应是LZ写错了吧,怎么可能一个工资(如1400)有三种税率,账务按哪个给你扣呀,呵呵
battery89 2012-09-11
  • 打赏
  • 举报
回复
他的下限都是一样的。。。between and不好用。。。
[Quote=引用 1 楼 的回复:]
SQL code

--大概就是这个样子,自已改下就可以了
create or replace procedure p_t(p_sal number)
as
v_shangxian number;
v_xiaxian number;
v_kouchushu number;
v_tax number;
begin
execute immediate 'select 工资下……
[/Quote]
battery89 2012-09-11
  • 打赏
  • 举报
回复
declare 
-- Local variables here
i integer;
begin
if i-1300<0 then
dbms_output.put_line('no');
return;
end if;
for item in (select * from 表) loop
if item.上限-i>=0 then
dbms_output.put_line('按这个标准交');
return;
end if;
end loop;
end;


我给你写了个匿名块,按照这个根据你的情况修改就好了
人生无悔 2012-09-11
  • 打赏
  • 举报
回复

--大概就是这个样子,自已改下就可以了
create or replace procedure p_t(p_sal number)
as
v_shangxian number;
v_xiaxian number;
v_kouchushu number;
v_tax number;
begin
execute immediate 'select 工资下限,工资上限,扣除数,税率 from 你的表 where :1 between 工资下限 and 工资上限'
into v_shangxian,v_xiaxian,v_kouchushu,v_tax
using p_sal;
dbms_output.put_line(v_shangxian);
end;
/

3,499

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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