接下来介绍上篇接触到的存储过程中的sql语句

 insert into TMP_GT3_sbfgl_WJSTJB
SELECT NSR.NSRSBH,
NSR.NSRMC,
NSR.SCJYDZ,
case
when NSRKZ.FDDBRYDDH is not null then
'法人' || NSRKZ.FDDBRYDDH
else
''
end || case
when NSRKZ.SWDLRLXDH is not null then
',税务代理人' || NSRKZ.SWDLRLXDH
else
''
end || case
when NSRKZ.BSRYDDH is not null then
',办税人' || NSRKZ.BSRYDDH
else
''
end AS FDDBRGDDH,
F.SWJGMC,
G.SWJGMC
FROM AP_CXBB_GT3_SBFAQYYIJSTJ_cs B ,
H_DJ_NSRXX NSR,
H_DJ_NSRXX_KZ NSRKZ,
DM_GY_SWJG_JH F,
DM_GY_SWJG_JH G
WHERE NSR.ZGSWJ_DM = F.SWJG_DM(+)
AND B.SWJGDM = G.SWJG_DM(+)
AND B.DJXH = NSR.DJXH(+)
AND B.DJXH = NSRKZ.DJXH(+)
AND ( B.SWJGDM IN
(SELECT SWJG_DM
FROM DM_GY_SWJG_JH V
START WITH V.SWJG_DM IN (PV_ZGSWJG)
CONNECT BY PRIOR V.SWJG_DM = V.SJSWJG_DM)) AND (VI_HYXH = 0 OR
NSR.HY_DM IN
(SELECT HY_DM
FROM DM_HY_JH
WHERE ZL IN
(SELECT HYDM FROM TEMP_HYDM_JH_HS WHERE XH = VI_HYXH))) ;

如上这是一句 insert  插入数据的语句(oracle支持一个集合,所以后面可以跟select 或 with 语句 ,with 的使用比较重要我会在 以后单独写一篇)

   SELECT  NSR.NSRSBH,
NSR.NSRMC,
NSR.SCJYDZ,
case
when NSRKZ.FDDBRYDDH is not null then
'法人' || NSRKZ.FDDBRYDDH
else
''
end || case
when NSRKZ.SWDLRLXDH is not null then
',税务代理人' || NSRKZ.SWDLRLXDH
else
''
end || case
when NSRKZ.BSRYDDH is not null then
',办税人' || NSRKZ.BSRYDDH
else
''
end AS FDDBRGDDH,
F.SWJGMC,
G.SWJGMC

上面是select语句的一部分,可以看出我们提取的需要的数据从哪几张表(NSR.SCJYDZ  中 nsr 是 表的别名,SCJYDZ为字段名)

FROM AP_CXBB_GT3_SBFAQYYIJSTJ_cs B ,
H_DJ_NSRXX NSR,
H_DJ_NSRXX_KZ NSRKZ,
DM_GY_SWJG_JH F,
DM_GY_SWJG_JH G
WHERE NSR.ZGSWJ_DM = F.SWJG_DM(+)
AND B.SWJGDM = G.SWJG_DM(+)
AND B.DJXH = NSR.DJXH(+)
AND B.DJXH = NSRKZ.DJXH(+)

上面是所有用到的表及相关表连接

H_DJ_NSRXX 是表名 ,NSR是其别名
从 NSR.ZGSWJ_DM = F.SWJG_DM(+) 可以看出 nsr 左连接表 F(根据 SWJG_DM 字段) 
这里强调下 oracle中使用连接方式有两种 ,一种是通用的 left out join ,inner join ,full out join 等
另一种就是这里用到的oracle特有的 (+) 方式。
对连接不熟悉的可以百度oracle左连接,右连接,内连接
WHERE NSR.ZGSWJ_DM = F.SWJG_DM(+)
AND B.SWJGDM = G.SWJG_DM(+)
AND B.DJXH = NSR.DJXH(+)
AND B.DJXH = NSRKZ.DJXH(+)
AND ( B.SWJGDM IN
(SELECT SWJG_DM
FROM DM_GY_SWJG_JH V
START WITH V.SWJG_DM IN (PV_ZGSWJG)
CONNECT BY PRIOR V.SWJG_DM = V.SJSWJG_DM)) AND (VI_HYXH = 0 OR
NSR.HY_DM IN
(SELECT HY_DM
FROM DM_HY_JH
WHERE ZL IN
(SELECT HYDM FROM TEMP_HYDM_JH_HS WHERE XH = VI_HYXH)))

接着就是where 条件语句 where 中一部分已经提过,纯纯粹为了左右连接写的条件,其他一些就是对数据的筛选

 (SELECT SWJG_DM
FROM DM_GY_SWJG_JH V
START WITH V.SWJG_DM IN (PV_ZGSWJG)
CONNECT BY PRIOR V.SWJG_DM = V.SJSWJG_DM)

输出为一个集合而不是 一个值 所以不用 = 而是用 in

其中

 START WITH V.SWJG_DM IN (PV_ZGSWJG)
CONNECT BY PRIOR V.SWJG_DM = V.SJSWJG_DM)

  为层次化查询  语句

START WITH
CONNECT BY PRIOR
为了方便树形 结构的数据 取 节点 数据
(SELECT HY_DM
FROM DM_HY_JH
WHERE ZL IN
(SELECT HYDM FROM TEMP_HYDM_JH_HS WHERE XH = VI_HYXH))

上面为嵌套子查询


 

oracle存储过程及sql优化-(三)的更多相关文章

  1. oracle存储过程及sql优化-(一)

             本篇主要介绍存储过程的结构 先简单介绍下: oracle存储过程与函数不同,oracle函数和存储过程都可以有多个输入,但是函数一般只有一个输出,而oracle可以有多个输出且与输入 ...

  2. oracle存储过程及sql优化-(二)

    接下来比较重要,我会先贴出一个存储过程,根据这个存储过程讲解 PROCEDURE AP_CXBB_GT3_SBFGL_SBFYJSQC (OUT_RECORD OUT SYS_REFCURSOR, P ...

  3. oracle 存储过程 动态sql语句

    一.在oracle项目开发中越到问题: 在利用ODP向oracle中插入数据时,如果这样写:   insert into clobTable (id, story) values(1,'....'); ...

  4. oracle中的SQL优化

    一.SQL语言的使用1.IN 操作符    用IN写出来的SQL的优点是比较容易写及清晰易懂,这比较适合现代软件开发的风格.    但是用IN的SQL性能总是比较低的,从ORACLE执行的步骤来分析用 ...

  5. oracle存储过程,sql语句执行时间

    create or replace procedure sum_info is i integer; temp1 varchar2(50); temp2 varchar2(50); t1 date; ...

  6. Sql优化(三) 关于oracle的并发

    Oracle的并发技术可以将一个大任务分解为多个小任务由多个进程共同完成.合理地使用并发可以充分利用系统资源,提高效率.一. 并发的种类Parallel queryParallel DML(PDML) ...

  7. 基于Oracle的SQL优化(社区万众期待 数据库优化扛鼎巨著)

    基于Oracle的SQL优化(社区万众期待数据库优化扛鼎巨著) 崔华 编   ISBN 978-7-121-21758-6 2014年1月出版 定价:128.00元 856页 16开 编辑推荐 本土O ...

  8. 对oracle中SQL优化的理解

    Oracle数据库里SQL优化的终极目标就是要缩短目标SQL语句的执行时间.要达到上述目的,我们通常只有如下三种方法可以选择:1.降低目标SQL语句的资源消耗.2.并行执行目标SQL语句.3.平衡系统 ...

  9. Oracle 表三种连接方式(sql优化)

    在查看sql执行计划时,我们会发现表的连接方式有多种,本文对表的连接方式进行介绍以便更好看懂执行计划和理解sql执行原理. 一.连接方式: 嵌套循环(Nested Loops (NL)) (散列)哈希 ...

随机推荐

  1. 客户端相关知识学习(五)之什么是webView

    webview是什么?作用是什么?和浏览器有什么关系? Android系统中内置了一款高性能 webkit 内核浏览器,在 SDK 中封装为一个叫做 WebView 组件也就是说WebView是一个基 ...

  2. SpringMVC整体架构

    总结: 1. 用户发起请求到前端控制器(DispatchServlet): 2. 前端控制器没有处理业务逻辑的能力,需要找到具体的模型对象处理(Handler),到处理器映射器中查找Handler对象 ...

  3. wex5 baasData规则和绑定 学习

    1 在baasData新建一个计算列 2 点击编辑规则,左边选择该计算列, 右边点击计算后面的设置 3 写规则的逻辑 好像不能用if 只能用三目运算符 4 绑定样式和文本的时候 这么用:

  4. Dell服务器硬件监控,使用omreport出现object not found 错误解决

    一.监控告警 登录目标主机,查看dataeng服务 [root@push-- src]# systemctl status dataeng ● dataeng.service - LSB: Syste ...

  5. Kendo UI for jQuery使用教程:初始化jQuery插件

    [Kendo UI for jQuery最新试用版下载] Kendo UI目前最新提供Kendo UI for jQuery.Kendo UI for Angular.Kendo UI Support ...

  6. MyEclipse开发秘籍——使用DevStyle Icon Designer(一)

    [MyEclipse CI 2019.4.0安装包下载] DevStyle主题包括一个Icon Designer,允许您自定义图标.Icon Designer包含在DevStyle主题中,可作为Ecl ...

  7. VCL界面控件DevExpress VCL Controls v19.1.3全新来袭

    DevExpress VCL Controls是 Devexpress公司旗下最老牌的用户界面套包.所包含的控件有:数据录入,图表,数据分析,导航,布局,网格,日程管理,样式,打印和工作流等,让您快速 ...

  8. DevExpress ASP.NET v19.1版本亮点:Pivot Grid等控件

    行业领先的.NET界面控件DevExpress 发布了v19.1版本,本文将以系列文章的方式为大家介绍DevExpress ASP.NET Controls v19.1中新增的一些控件及增强的控件功能 ...

  9. graphviz 决策树绘图中文乱码解决方法

    1.修改graphviz配置文件 <dir>C:\WINDOWS\Fonts</dir> 更改为 <dir>~/.fonts</dir> 2.将决策树d ...

  10. WTL项目各种error的解决方法

    error RC1015: cannot open include file 'atlres.h' 解决办法: 向“VC项目属性->资源->附加包含目录” 添加WTL的Include目录( ...