热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Postgresql存储过程涉及到多表查询

如果Postgresql存储过程涉及到多表查询返回多个表中的字段,要怎么写查询语句呢,是不是要自定义视图?还有就是存储过程中有两个或两条以上的查询语句,都有返回值,是不是也要自定义临时表返回呢?最后一
如果Postgresql存储过程涉及到多表查询返回多个表中的字段,要怎么写查询语句呢,是不是要自定义视图?还有就是存储过程中有两个或两条以上的查询语句,都有返回值,是不是也要自定义临时表返回呢?最后一个就是有三个不确定类型的字段返回,这种都要怎么设置返回呢?

6 个解决方案

#1


Postgresql存储过程中涉及到多表查询且要返回两个表中的某些个字段或一个存储过程中有多个查询语句且都要有返回值,是不是只能用自定义视图来返回这些查询的结果呢?有没有其他的方法?

#2


Q. 返回多个表中的字段
A: 你可以创建 type, 然后存储过程的返回类型为该 type
类如:

create type tmp.type1 as
(
...
);


CREATE OR REPLACE FUNCTION tmp.test()
  RETURNS SETOF tmp.type1 AS
.....


Q: 有两条或两条以上的查询语句,是不是要定义临时表返回
A: 如果查询语句的返回的数据结构一样,可以使用union all合并结果集.
   如果有两种或两种以上的数据结构需要返回,建议使用两个存储过程

Q:有三个不确定类型的字段需要返回
A: 可以用 returns record的方式, 但查询时仍需注意类型转换, 建议用返回xml,把三个字段放在xml中,然后业务层进行解析

#3


可以用游标和RECORD集合来返回结果集。

#4


  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;

#5


其实LZ的问题没有太看得懂呀。GP数据库中的查询与ORACLE中其实是大同小异,在ORACLE中能做的,GP表达起来也差不多,只有个别语法,比如建立外部表呀,不同

#6


恩恩,谢谢各位!  这个问题我随后用的是临时表解决的,在存储过程中创建临时表,用这样的方法我觉得很是方便!

推荐阅读
  • 本文全面解析了 Python 中字符串处理的常用操作与技巧。首先介绍了如何通过 `s.strip()`, `s.lstrip()` 和 `s.rstrip()` 方法去除字符串中的空格和特殊符号。接着,详细讲解了字符串复制的方法,包括使用 `sStr1 = sStr2` 进行简单的赋值复制。此外,还探讨了字符串连接、分割、替换等高级操作,并提供了丰富的示例代码,帮助读者深入理解和掌握这些实用技巧。 ... [详细]
  • 本文探讨了使用JavaScript在不同页面间传递参数的技术方法。具体而言,从a.html页面跳转至b.html时,如何携带参数并使b.html替代当前页面显示,而非新开窗口。文中详细介绍了实现这一功能的代码及注释,帮助开发者更好地理解和应用该技术。 ... [详细]
  • 使用 `git stash` 可以将当前未提交的修改保存到一个临时存储区,以便在后续恢复工作目录时使用。例如,在处理中间状态时,可以通过 `git stash` 命令将当前的所有未提交更改推送到一个新的储藏中,从而保持工作目录的整洁。此外,本文还将详细介绍如何解决 `git stash pop` 时可能出现的冲突问题,帮助用户高效地管理代码变更。 ... [详细]
  • ClassList对象学习心得与表单事件非空校验技巧
    ClassList对象学习心得与表单事件非空校验技巧 ... [详细]
  • 如何使用 `org.apache.poi.openxml4j.opc.PackagePart` 类中的 `loadRelationships()` 方法及其代码示例详解 ... [详细]
  • 本文介绍了如何利用Struts1框架构建一个简易的四则运算计算器。通过采用DispatchAction来处理不同类型的计算请求,并使用动态Form来优化开发流程,确保代码的简洁性和可维护性。同时,系统提供了用户友好的错误提示,以增强用户体验。 ... [详细]
  • C++ 异步编程中获取线程执行结果的方法与技巧及其在前端开发中的应用探讨
    本文探讨了C++异步编程中获取线程执行结果的方法与技巧,并深入分析了这些技术在前端开发中的应用。通过对比不同的异步编程模型,本文详细介绍了如何高效地处理多线程任务,确保程序的稳定性和性能。同时,文章还结合实际案例,展示了这些方法在前端异步编程中的具体实现和优化策略。 ... [详细]
  • 本文详细介绍了在 Oracle 数据库中使用 MyBatis 实现增删改查操作的方法。针对查询操作,文章解释了如何通过创建字段映射来处理数据库字段风格与 Java 对象之间的差异,确保查询结果能够正确映射到持久层对象。此外,还探讨了插入、更新和删除操作的具体实现及其最佳实践,帮助开发者高效地管理和操作 Oracle 数据库中的数据。 ... [详细]
  • 在Linux系统中,网络配置是至关重要的任务之一。本文详细解析了Firewalld和Netfilter机制,并探讨了iptables的应用。通过使用`ip addr show`命令来查看网卡IP地址(需要安装`iproute`包),当网卡未分配IP地址或处于关闭状态时,可以通过`ip link set`命令进行配置和激活。此外,文章还介绍了如何利用Firewalld和iptables实现网络流量控制和安全策略管理,为系统管理员提供了实用的操作指南。 ... [详细]
  • Amoeba 通过优化 MySQL 的读写分离功能显著提升了数据库性能。作为一款基于 MySQL 协议的代理工具,Amoeba 能够高效地处理应用程序的请求,并根据预设的规则将 SQL 请求智能地分配到不同的数据库实例,从而实现负载均衡和高可用性。该方案不仅提高了系统的并发处理能力,还有效减少了主数据库的负担,确保了数据的一致性和可靠性。 ... [详细]
  • 本文详细介绍了一种利用 ESP8266 01S 模块构建 Web 服务器的成功实践方案。通过具体的代码示例和详细的步骤说明,帮助读者快速掌握该模块的使用方法。在疫情期间,作者重新审视并研究了这一未被充分利用的模块,最终成功实现了 Web 服务器的功能。本文不仅提供了完整的代码实现,还涵盖了调试过程中遇到的常见问题及其解决方法,为初学者提供了宝贵的参考。 ... [详细]
  • 本文详细介绍了在Linux系统上编译安装MySQL 5.5源码的步骤。首先,通过Yum安装必要的依赖软件包,如GCC、GCC-C++等,确保编译环境的完备。接着,下载并解压MySQL 5.5的源码包,配置编译选项,进行编译和安装。最后,完成安装后,进行基本的配置和启动测试,确保MySQL服务正常运行。 ... [详细]
  • 本文以 www.域名.com 为例,详细介绍如何为每个注册用户提供独立的二级域名,如 abc.域名.com。实现这一功能的核心步骤包括:首先,确保域名支持泛解析,即将 A 记录设置为 *.域名.com,以便将所有二级域名请求指向同一服务器。接着,在服务器端使用 ASP.NET 2.0 进行配置,通过解析 HTTP 请求中的主机头信息,动态识别并处理不同的二级域名,从而实现个性化内容展示。此外,还需在数据库中维护用户与二级域名的对应关系,确保每个用户的二级域名都能正确映射到其专属内容。 ... [详细]
  • 在本文中,我们将为 HelloWorld 项目添加视图组件,以确保控制器返回的视图路径能够正确映射到指定页面。这一步骤将为后续的测试和开发奠定基础。首先,我们将介绍如何配置视图解析器,以便 SpringMVC 能够识别并渲染相应的视图文件。 ... [详细]
  • 如何使用mysql_nd:Python连接MySQL数据库的优雅指南
    无论是进行机器学习、Web开发还是爬虫项目,数据库操作都是必不可少的一环。本文将详细介绍如何使用Python通过 `mysql_nd` 库与 MySQL 数据库进行高效连接和数据交互。内容涵盖以下几个方面: ... [详细]
author-avatar
黑糖老姜茶
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有