pgsql 函数、存储过程用法

复制代码
函数

--
获取年月日 2022-03-01 select date(to_timestamp(round(1646103144959/1000)) + interval '1 hour' * 8 ) --获取当前年份 thisyear:=(select to_char(to_timestamp(floor(EXTRACT(epoch FROM (now()::timestamp with time zone)))),'yyyy')::integer); --备注说明【获取工人今年总工作日(天)】--用户【CYL】--时间【2022-3-3】 CREATE OR REPLACE FUNCTION public.fx_get_worker_this_year_data ( workerid integer --工人ID ) RETURNS integer LANGUAGE 'plpgsql' COST 100 VOLATILE PARALLEL UNSAFE AS $BODY$ declare returnvalue integer; declare thisyear integer; begin thisyear:=(select to_char(to_timestamp(floor(EXTRACT(epoch FROM (now()::timestamp with time zone)))),'yyyy')::integer); select count(distinct(date(to_timestamp(round(t_reimbursement_worker_info.add_time/1000)) + interval '1 hour' * 8 ))) into returnvalue from t_reimbursement_worker_info left join t_reimbursement_info on t_reimbursement_worker_info.reimbursement_id=t_reimbursement_info.reimbursement_id where examine_state=2 and t_reimbursement_worker_info.worker_id=workerid and fx_get_year_by_timestamp(t_reimbursement_worker_info.add_time)=thisyear; return returnvalue; end; $BODY$; --备注说明【获取工人今年总住宿时间(天)】--用户【CYL】--时间【2022-3-3】 CREATE OR REPLACE FUNCTION public.fx_get_worker_accommodation_this_year_data ( workerid integer --工人ID ) RETURNS integer LANGUAGE 'plpgsql' COST 100 VOLATILE PARALLEL UNSAFE AS $BODY$ declare returnvalue integer; declare thisyear integer; begin thisyear:=(select to_char(to_timestamp(floor(EXTRACT(epoch FROM (now()::timestamp with time zone)))),'yyyy')::integer); select sum(accommodation_num) into returnvalue from t_worker_accommodation_subsidy_record_info where fx_get_year_by_timestamp(add_time)=thisyear and worker_id=workerid; return returnvalue; end; $BODY$; --备注说明【获取工人今年住宿总补助额】--用户【CYL】--时间【2022-3-3】 CREATE OR REPLACE FUNCTION public.fx_get_worker_accommodation_money_this_year_data ( workerid integer --工人ID ) RETURNS numeric(18,2) LANGUAGE 'plpgsql' COST 100 VOLATILE PARALLEL UNSAFE AS $BODY$ declare returnvalue integer; declare thisyear integer; begin thisyear:=(select to_char(to_timestamp(floor(EXTRACT(epoch FROM (now()::timestamp with time zone)))),'yyyy')::integer); select sum(accommodation_num * subsidy_amount) into returnvalue from t_worker_accommodation_subsidy_record_info where fx_get_year_by_timestamp(add_time)=thisyear and worker_id=workerid; return returnvalue; end; $BODY$;
复制代码
复制代码
存储过程

--
备注说明【工人列表】--用户【CYL】--时间【2022-3-3】 CREATE OR REPLACE PROCEDURE public.pr_worker_info_get_list_by_page( startindex integer, pagesize integer, strwhere character varying, strorder character varying, INOUT workerinfocursor refcursor, INOUT workerinfocountcursor refcursor) LANGUAGE 'plpgsql' AS $BODY$ declare exec_sql character varying; declare exec_str_order character varying; declare exec_recordcount_sql character varying; begin exec_str_order := ' t_worker_info.worker_id desc '; if length(strorder)>0 then exec_str_order := strorder; end if; exec_sql := ' select worker_id,head_img,nick_name,login_name,wage_amount,fx_get_worker_this_year_data(worker_id) as total_week_days, fx_get_worker_accommodation_this_year_data(worker_id) as total_accommodation_days, fx_get_worker_accommodation_money_this_year_data(worker_id) as total_accommodation_money_days from t_worker_info '; exec_recordcount_sql := ' select count(t_worker_info.worker_id) as record_count from t_worker_info '; if length(strwhere)>0 then exec_sql := format('%s where %s',exec_sql,strwhere); exec_recordcount_sql := format(' %s where %s ',exec_recordcount_sql,strwhere); end if; exec_sql := format('%s order by %s limit %s offset %s ',exec_sql,exec_str_order,pagesize,startindex); open workerinfocursor for execute exec_sql; open workerinfocountcursor for execute exec_recordcount_sql; end; $BODY$; --备注说明【新增工人信息】--用户【CYL】--时间【2022-3-3】 CREATE OR REPLACE PROCEDURE public.pr_worker_info_add( loginname character varying, headimg character varying, nickname character varying, wageamount numeric(18,2), INOUT returnvalue integer) LANGUAGE 'plpgsql' AS $BODY$ declare stack text; declare currenttime bigint; begin currenttime:=floor(EXTRACT(epoch FROM (now()::timestamp with time zone))*1000); insert into t_worker_info(login_name,head_img,nick_name,add_time,wage_amount,is_show,is_del) values(loginname,headimg,nickname,currenttime,wageamount,1,0); returnvalue:=1; exception WHEN RAISE_EXCEPTION THEN begin GET STACKED DIAGNOSTICS stack = MESSAGE_TEXT; RAISE NOTICE E'--- Call Stack ---\n%', stack ; returnvalue = 0; end; end $BODY$; --备注说明【获取工人信息】--用户【CYL】--时间【2022-3-3】 CREATE OR REPLACE PROCEDURE public.pr_worker_info_get_model ( workerid integer, INOUT workerinfocursor refcursor ) LANGUAGE 'plpgsql' AS $BODY$ begin open workerinfocursor for select worker_id, login_name, head_img, nick_name, add_time, wage_amount, is_show, is_del from t_worker_info where worker_id=workerid; end $BODY$; --备注说明【编辑工人信息】--用户【CYL】--时间【2022-3-3】 CREATE OR REPLACE PROCEDURE public.pr_worker_info_edit( workerid integer, loginname character varying, headimg character varying, nickname character varying, wageamount numeric, isshow integer, INOUT returnvalue integer) LANGUAGE 'plpgsql' AS $BODY$ declare stack text; begin update t_worker_info set login_name=loginname,head_img=headimg,nick_name=nickname,wage_amount=wageamount,is_show=isshow where worker_id=workerid; returnvalue:=1; exception WHEN RAISE_EXCEPTION THEN begin GET STACKED DIAGNOSTICS stack = MESSAGE_TEXT; RAISE NOTICE E'--- Call Stack ---\n%', stack ; returnvalue = 0; end; end $BODY$; --备注说明【删除工人信息】--用户【CYL】--时间【2022-3-3】 CREATE OR REPLACE PROCEDURE public.pr_worker_info_del ( workerid integer, INOUT returnvalue integer ) LANGUAGE 'plpgsql' AS $BODY$ declare stack text; begin update t_worker_info set is_del=1 where worker_id=workerid; returnvalue:=1; exception WHEN RAISE_EXCEPTION THEN begin GET STACKED DIAGNOSTICS stack = MESSAGE_TEXT; RAISE NOTICE E'--- Call Stack ---\n%', stack ; returnvalue = 0; end; end $BODY$;
复制代码

 

posted @   绝世大黄瓜  阅读(816)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示