作者:黑糖老姜茶 | 来源:互联网 | 2023-07-29 11:17
如果Postgresql存储过程涉及到多表查询返回多个表中的字段,要怎么写查询语句呢,是不是要自定义视图?还有就是存储过程中有两个或两条以上的查询语句,都有返回值,是不是也要自定义临时表返回呢?最后一
如果Postgresql存储过程涉及到多表查询返回多个表中的字段,要怎么写查询语句呢,是不是要自定义视图?还有就是存储过程中有两个或两条以上的查询语句,都有返回值,是不是也要自定义临时表返回呢?最后一个就是有三个不确定类型的字段返回,这种都要怎么设置返回呢?
6 个解决方案
Postgresql存储过程中涉及到多表查询且要返回两个表中的某些个字段或一个存储过程中有多个查询语句且都要有返回值,是不是只能用自定义视图来返回这些查询的结果呢?有没有其他的方法?
insert into ods.tf_b_trade_svc(
ppt_id, --数据沉淀循环周期
TRADE_ID, --业务流水号
ACCEPT_MONTH, --受理月份
USER_ID, --用户标识
SERVICE_ID, --服务标识
MODIFY_TAG, --修改标志
START_DATE, --开始时间
END_DATE, --结束时间
PRODUCT_ID, --产品标识
PACKAGE_ID, --包标识
ITEM_ID, --属性标识
USER_ID_A, --A用户标识
PROV_ID --省分标识
)
select
iUni_PPTid,
coalesce(b.bms_accept_id,to_char(now(),'yyyymmddhh24miss')) ,
substr(coalesce(b.bms_accept_id,to_char(now(),'yyyymmddhh24miss')),5,2)::numeric ,
a.subscription_id,
a.svc_feat_peid,
case when a.inactive_time < now() then 2 else 1 end,
a.active_time,
a.inactive_time,
coalesce(c.product_id,0),--产品标识
coalesce(c.mu_id,0),--包标识
null,
-1,
v_prov_id
from hunan.ucs_subs_svc_feature_d a
left join (select bms_accept_id,confirm_time,reserved2,service_type from hunan.bms_accept_yyyymm_d where ppt_id = iProv_PPTid1 and accept_status in (8,9)) b
on ((a.create_time,a.subscription_id)=(b.confirm_time,b.reserved2) or
(a.inactive_time,a.subscription_id)=(b.confirm_time,b.reserved2) or
(a.active_time,a.subscription_id)=(b.confirm_time,b.reserved2) or
(a.abs_active_time,a.subscription_id)=(b.confirm_time,b.reserved2) or
(a.abs_inactive_time,a.subscription_id)=(b.confirm_time,b.reserved2))
left join (select * from hunan.ucs_subs_component_d where ppt_id = iProv_PPTid2 and (subs_scheme_id=0 or subs_scheme_id is null) and mu_id in (select mu_id from hunan.pm_mu_d where pe_grp_id <> 0 and ppt_id = iProv_PPTid3)) c
on ((a.create_time,a.subscription_id)=(c.create_time,c.subscription_id) or
(a.inactive_time,a.subscription_id)=(c.inactive_time,c.subscription_id) or
(a.active_time,a.subscription_id)=(c.active_time,c.subscription_id) or
(a.abs_active_time,a.subscription_id)=(c.abs_active_time,c.subscription_id) or
(a.abs_inactive_time,a.subscription_id)=(c.abs_inactive_time,c.subscription_id))
where a.ppt_id = iProv_PPTid;
其实LZ的问题没有太看得懂呀。GP数据库中的查询与ORACLE中其实是大同小异,在ORACLE中能做的,GP表达起来也差不多,只有个别语法,比如建立外部表呀,不同
恩恩,谢谢各位! 这个问题我随后用的是临时表解决的,在存储过程中创建临时表,用这样的方法我觉得很是方便!