用Mysql存储过程查询你的三险一金及收入
2009年10月09日 作者: 大头刚
三险即:养老保险、失业保险、医疗保险。
一金即:住房公积金(购房按揭时所用)。
每个地区的缴费比例可能不太一样,有些公司可能是五险一金。下面以北京三险一金为例,用mysql存储过程来查询你的三险一金以及你的收入,呵呵,也许你会发现你到手的收入只有你实际工资的一半哦。(参考了网上的PL/SQL过程)。
例如你的工资为5000元,那么你的实际收入情况如下:
mysql> call calc_salary(5000); +-----------------------------------------------+ | income_info | +-----------------------------------------------+ | pension_insurance_1(20.00%) : 1000.00 | | pension_insurance_2(8.00%) : 400.00 | | medical_insurance_1(10.00%) : 500.00 | | medical_insurance_2(2.00%) : 103.00 | | unemployment_insurance_1(1.50%) : 75.00 | | unemployment_insurance_2(0.50%) : 25.00 | | workinjury_insurance_1(0.00%) : 0.00 | | maternity_insurance_1(0.00%) : 0.00 | | house_fund_1(8.00%) : 400.00 | | house_fund_2(8.00%) : 400.00 | | should_tax : 2072.00 | | tax_ratio : 0.15 | | susuankouchushu : 125 | | tax : 185.80 | | basic_wages : 5000 | | company_insurance_fund : 1975.00 | | company_cost : 6975.00 | /* 公司总成本 */ | personal_insurance : 528.00 | | total_house_fund : 800.00 | | real_income : 3886.20 | /* 实际收入 */ | real_income(have house) : 4686.20 | /* 虚拟收入(包括实收和基金) */ +-----------------------------------------------+ 21 rows in set (0.00 sec)
下面是源代码:
delimiter // DROP PROCEDURE calc_salary// CREATE PROCEDURE calc_salary ( IN p_basic_wages int /*基本工资 */ ) BEGIN DECLARE p_pension_insurance_1 DECIMAL(4,2) DEFAULT 0.20; /* 养老保险公司缴存比例 */ DECLARE p_pension_insurance_2 DECIMAL(4,2) DEFAULT 0.08; /* 养老保险个人缴存比例 */ DECLARE p_medical_insurance_1 DECIMAL(4,2) DEFAULT 0.10; /* 医疗保险公司缴存比例 */ DECLARE p_medical_insurance_2 DECIMAL(4,2) DEFAULT 0.02; /* 医疗保险个人缴存比例+3元 */ DECLARE p_unemployment_insurance_1 DECIMAL(6,4) DEFAULT 0.015; /* 失业保险公司缴存比例 */ DECLARE p_unemployment_insurance_2 DECIMAL(6,4) DEFAULT 0.005; /* 失业保险个人缴存比例 */ DECLARE p_workinjury_insurance_1 DECIMAL(4,2) DEFAULT 0.00; /* 工伤保险公司缴存比例,个人不交 */ DECLARE p_maternity_insurance_1 DECIMAL(4,2) DEFAULT 0.00; /* 生育保险公司缴存比例,个人不交 */ DECLARE p_house_fund_1 DECIMAL(4,2) DEFAULT 0.08; /* 住房公积金公司缴存比例 */ DECLARE p_house_fund_2 DECIMAL(4,2) DEFAULT 0.08; /* 住房公积金个人缴存比例 */ DECLARE p_medical_insurance_fee int DEFAULT 3; /* 医疗保险个人工本费3元 */ DECLARE p_tax_start int DEFAULT 2000; /* 纳税起征额度 */ DECLARE v_should_tax DECIMAL(10, 2); /*应纳税所得额,是基本工资减去起征额度和扣除各项个人缴存的保险基金后的额度*/ DECLARE v_susuankouchushu int(10); /* 速算扣除数 */ DECLARE v_tax DECIMAL(10, 2); /* 税额 */ DECLARE v_total_house_fund DECIMAL(10, 2); /* 住房公积金总额 */ DECLARE v_real_income DECIMAL(10, 2); /* 实际收入 */ DECLARE v_real_income_have_house DECIMAL(10, 2); /* 虚拟收入(包括实收和基金) */ DECLARE v_personal_insurance DECIMAL(10, 2); /* 个人缴存的保险和基金 */ DECLARE v_company_insurance_fund DECIMAL(10, 2); /* 公司缴存的保险和基金 */ DECLARE v_company_cost DECIMAL(10, 2); /* 公司总成本 */ DECLARE v_pension_insurance_1 DECIMAL(10, 2); /*养老保险公司缴存数额*/ DECLARE v_pension_insurance_2 DECIMAL(10, 2); /*养老保险个人缴存数额*/ DECLARE v_medical_insurance_1 DECIMAL(10, 2); /*医疗保险公司缴存数额*/ DECLARE v_medical_insurance_2 DECIMAL(10, 2); /*医疗保险个人缴存数额+3元 */ DECLARE v_unemployment_insurance_1 DECIMAL(10, 2); /*失业保险公司缴存数额 */ DECLARE v_unemployment_insurance_2 DECIMAL(10, 2); /*失业保险个人缴存数额 */ DECLARE v_workinjury_insurance_1 DECIMAL(10, 2); /*工伤保险公司缴存数额,个人不交*/ DECLARE v_maternity_insurance_1 DECIMAL(10, 2); /*生育保险公司缴存数额,个人不交*/ DECLARE v_house_fund_1 DECIMAL(10, 2); /*住房公积金公司缴存数额 */ DECLARE v_house_fund_2 DECIMAL(10, 2); /*住房公积金个人缴存数额 */ DECLARE v_tax_ratio DECIMAL(10, 2); /* 税率 */ SET v_pension_insurance_1:= p_basic_wages * p_pension_insurance_1; SET v_pension_insurance_2:= p_basic_wages * p_pension_insurance_2; SET v_medical_insurance_1:= p_basic_wages * p_medical_insurance_1; SET v_medical_insurance_2 := p_basic_wages * p_medical_insurance_2 + p_medical_insurance_fee; SET v_unemployment_insurance_1:= p_basic_wages * p_unemployment_insurance_1; SET v_unemployment_insurance_2:= p_basic_wages * p_unemployment_insurance_2; SET v_workinjury_insurance_1:= p_basic_wages * p_workinjury_insurance_1; SET v_maternity_insurance_1:= p_basic_wages * p_maternity_insurance_1; SET v_house_fund_1:= p_basic_wages * p_house_fund_1; SET v_house_fund_2:= p_basic_wages * p_house_fund_2; SET v_should_tax:= p_basic_wages - p_tax_start - v_pension_insurance_2 - v_medical_insurance_2 - v_unemployment_insurance_2 - v_house_fund_2; SET v_total_house_fund:= v_house_fund_1 + v_house_fund_2; SET v_personal_insurance:= v_pension_insurance_2 + v_medical_insurance_2 + v_unemployment_insurance_2; SET v_company_insurance_fund:= v_pension_insurance_1 + v_medical_insurance_1 + v_unemployment_insurance_1 + v_workinjury_insurance_1 + v_maternity_insurance_1 + v_house_fund_1; /* 全月应纳税所得额 税率(%) 速算扣除数(元) 1 不超过500元的 5 0 2 超过500元至2000元的部分 10 25 3 超过2000元至5000元的部分 15 125 4 超过5000元至20000元的部分 20 375 5 超过20000元至40000元的部分 25 1375 6 超过40000元至60000元的部分 30 3375 7 超过60000元至80000元的部分 35 6375 8 超过80000元至100000元的部分 40 10375 9 超过100000元的部分 45 15375 */ CASE WHEN v_should_tax < 500 THEN SET v_tax_ratio := 0.05; SET v_susuankouchushu := 0; WHEN v_should_tax < 2000 THEN SET v_tax_ratio := 0.10; SET v_susuankouchushu := 25; WHEN v_should_tax < 5000 THEN SET v_tax_ratio := 0.15; SET v_susuankouchushu := 125; WHEN v_should_tax < 20000 THEN SET v_tax_ratio := 0.20; SET v_susuankouchushu := 375; WHEN v_should_tax < 40000 THEN SET v_tax_ratio := 0.25; SET v_susuankouchushu := 1375; WHEN v_should_tax < 60000 THEN SET v_tax_ratio := 0.30; SET v_susuankouchushu := 3375; WHEN v_should_tax < 80000 THEN SET v_tax_ratio := 0.35; SET v_susuankouchushu := 6375; WHEN v_should_tax < 100000 THEN SET v_tax_ratio := 0.40; SET v_susuankouchushu := 10375; ELSE SET v_tax_ratio := 0.45; SET v_susuankouchushu := 15375; END CASE; SET v_tax:=v_should_tax * v_tax_ratio - v_susuankouchushu; SET v_real_income:=v_should_tax + p_tax_start - v_tax; SET v_real_income_have_house:= v_real_income + v_total_house_fund; SET v_company_cost:= p_basic_wages + v_company_insurance_fund; SELECT CONCAT('pension_insurance_1(',ROUND(p_pension_insurance_1*100,2),'%)',' : ',v_pension_insurance_1) AS income_info UNION ALL SELECT CONCAT('pension_insurance_2(',ROUND(p_pension_insurance_2*100,2),'%)',' : ',v_pension_insurance_2) UNION ALL SELECT CONCAT('medical_insurance_1(',ROUND(p_medical_insurance_1*100,2),'%)',' : ',v_medical_insurance_1) UNION ALL SELECT CONCAT('medical_insurance_2(',ROUND(p_medical_insurance_2*100,2),'%)',' : ',v_medical_insurance_2) UNION ALL SELECT CONCAT('unemployment_insurance_1(',ROUND(p_unemployment_insurance_1*100,2),'%)',' : ',v_unemployment_insurance_1) UNION ALL SELECT CONCAT('unemployment_insurance_2(',ROUND(p_unemployment_insurance_2*100,2),'%)',' : ',v_unemployment_insurance_2) UNION ALL SELECT CONCAT('workinjury_insurance_1(',ROUND(p_workinjury_insurance_1*100,2),'%)',' : ',v_workinjury_insurance_1) UNION ALL SELECT CONCAT('maternity_insurance_1(',ROUND(p_maternity_insurance_1*100,2),'%)',' : ',v_maternity_insurance_1) UNION ALL SELECT CONCAT('house_fund_1(',ROUND(p_house_fund_1*100,2),'%)',' : ',v_house_fund_1) UNION ALL SELECT CONCAT('house_fund_2(',ROUND(p_house_fund_2*100,2),'%)',' : ',v_house_fund_2) UNION ALL SELECT CONCAT('should_tax : ',v_should_tax) UNION ALL SELECT CONCAT('tax_ratio : ',v_tax_ratio) UNION ALL SELECT CONCAT('susuankouchushu : ',v_susuankouchushu) UNION ALL SELECT CONCAT('tax : ',v_tax) UNION ALL SELECT CONCAT('basic_wages : ',p_basic_wages) UNION ALL SELECT CONCAT('company_insurance_fund : ',v_company_insurance_fund) UNION ALL SELECT CONCAT('company_cost : ',v_company_cost) UNION ALL SELECT CONCAT('personal_insurance : ',v_personal_insurance) UNION ALL SELECT CONCAT('total_house_fund : ',v_total_house_fund) UNION ALL SELECT CONCAT('real_income : ',v_real_income) UNION ALL SELECT CONCAT('real_income(have house) : ',v_real_income_have_house) ; END; //
Leave a Reply.




- Comments (0)
- Trackbacks (0)
Leave a comment TrackbackNo comments yet.
No trackback yet.