微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

postgresql 9.4存储过程示例

create or replace function product_analyze_day_stat(p_stat_day timestamp)
returns void as $$
/**
*货品分析日报表
*/
declare
	v_db_info varchar(1000) := '172.17.209.165;bi_edw;u_retail_gms';
	v_function_name varchar(100) := 'product_analyze_day_stat';
	v_step integer := 1;
	v_start_time timestamp;
	v_end_time timestamp;
	v_curr_price record;
begin

	--1.初始化工作
	begin
		if p_stat_day is null then
			v_start_time := date_trunc('day',Now());
			v_end_time := v_start_time + interval '1 day';
		else
			v_start_time := date_trunc('day',p_stat_day);
			v_end_time := v_start_time + interval '1 day';
		end if;

		--删除重复统计的数据
		delete from item_analysis_report iar where iar.stat_day = v_start_time;
		perform write_log(v_db_info,v_function_name,1,'初始化工作');
	exception when others then
		perform write_log(v_db_info,concat('初始化工作异常:',sqlerrm));
	end;
	
	--2.基础数据规总(订货单位、商品编码、大类、季节、年份、风格)
	begin
		insert into item_analysis_report(stat_day,order_unit_no,item_no,item_code,item_name,category_no,sell_season,years,style)
		select v_start_time,ou.order_unit_no,rmt.item_no,rmt.code,rmt.name,rmt.category_no,rmt.sell_season,rmt.years,rmt.style
		from retail_mdm_order_unit ou,retail_mdm_order_brand_store_rel obsr,retail_mdm_item rmt
		where ou.order_unit_no = obsr.order_unit_no
		  and obsr.brand_no = rmt.brand_no;

		perform write_log(v_db_info,2,'基础数据规总');
	exception when others then
		perform write_log(v_db_info,concat('基础数据规总异常:',sqlerrm));
	end;

	--3.牌价计算
	begin
		update item_analysis_report iar set iar.tag_price = (
			select rmpql.tag_price
			from retail_mps_price_quotation_list rmpql 
			where rmpql.organ_id = iar.order_unit_no
			  and rmpql.brand_no = iar.brand_no
			);

		perform write_log(v_db_info,3,'牌价计算');
	exception when others then
		perform write_log(v_db_info,concat('牌价计算异常:',sqlerrm));
	end;
	
	--4.现价计算,折扣
	begin

		for v_curr_price in(
			select iar.id,rppcl.price 
			from retail_pms_price_change_list rppcl,item_analysis_report iar 
			where rppcl.organ_id = iar.order_unit_no 
			  and rppcl.brand_no = iar.brand_no ) loop
			update item_analysis_report iar set 
				iar.tag_price = coalesce(v_curr_price.price,iar.tag_price),iar.disc_rate = round(coalesce(v_curr_price.price,iar.tag_price)/coalesce(iar.tag_price,1),4)
				where iar.id = v_curr_price.id;
		end loop;

		perform write_log(v_db_info,4,'现价计算,折扣');
	exception when others then
		perform write_log(v_db_info,concat('现价计算,折扣异常:',sqlerrm));
	end;
	
	--5.上柜日
	begin

		perform write_log(v_db_info,5,'上柜日');
	exception when others then
		perform write_log(v_db_info,concat('上柜日异常:',sqlerrm));
	end;

	--6.订货量、补货量
	begin

		perform write_log(v_db_info,6,'订货量、补货量');
	exception when others then
		perform write_log(v_db_info,concat('订货量、补货量异常:',sqlerrm));
	end;
	  
	--7.进货量
	begin

		perform write_log(v_db_info,7,'进货量');
	exception when others then
		perform write_log(v_db_info,concat('进货量异常:',sqlerrm));
	end;
	  
	--8.转入量、入在途、转出量、退残量
	begin

		perform write_log(v_db_info,8,'转入量、转出量、退残量');
	exception when others then
		perform write_log(v_db_info,concat('转入量、转出量、退残量异常:',sqlerrm));
	end;

	--9.退残量
	begin

		perform write_log(v_db_info,9,'退残量');
	exception when others then
		perform write_log(v_db_info,concat('退残量异常:',sqlerrm));
	end;
	  
	--10.销售量
	begin

		perform write_log(v_db_info,10,'销售量');
	exception when others then
		perform write_log(v_db_info,concat('销售量异常:',sqlerrm));
	end;

	--11.周销售
	begin

		perform write_log(v_db_info,11,'周销售');
	exception when others then
		perform write_log(v_db_info,concat('周销售异常:',sqlerrm));
	end;
	
	--12.财务存
	begin

		perform write_log(v_db_info,12,'财务存');
	exception when others then
		perform write_log(v_db_info,concat('财务存异常:',sqlerrm));
	end;

	--13.周销售
	begin

		perform write_log(v_db_info,13,sqlerrm));
	end;

	--14.第一次折扣日、第二次折扣日、最后一次折扣日、一次折价、二次折价、最后一次折价
	begin

		perform write_log(v_db_info,14,'第一次折扣日、第二次折扣日、最后一次折扣日、一次折价、二次折价、最后一次折价');
	exception when others then
		perform write_log(v_db_info,concat('第一次折扣日、第二次折扣日、最后一次折扣日、一次折价、二次折价、最后一次折价异常:',sqlerrm));
	end;

exception when others then
	perform write_log(v_db_info,99,sqlerrm);
end;
$$ language plpgsql;


create or replace function write_log(p_db_info varchar,p_function_name varchar,step_num integer,step_desc varchar)
returns void as $$
/**
*过程运行日志+异常日志
*/
declare
begin
	insert into t_runtime_step_log(db_info,function_name,run_step,step_desc)
	  values(p_db_info,p_function_name,step_num,step_desc);
end;
$$ language plpgsql;


版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐