接下来介绍上篇接触到的存储过程中的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. Scala学习一——基础

    一.使用Scala解释器 如果以命令行的方式运行,输出的结果会把类型带上,且结果名默认为res0递增.且Scala解释器读到一个解释器求值打印然后读取下一个(这个过程为读取-求值-打印-循环[REPL ...

  2. jQuery选择器引入

    <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...

  3. katalon设置Android SDK路径

    本文链接:https://blog.csdn.net/feiniao8651/article/details/82809147文章允许转载,请注明来源:https://blog.csdn.net/fe ...

  4. python之开发规范

    命名规范 Python之父推荐的规范 Type Public Internal Modules lower_with_under _lower_with_under Packages lower_wi ...

  5. ccs之经典布局(二)(两栏,三栏布局)

    接上篇ccs之经典布局(一)(水平垂直居中) 四.两列布局 单列宽度固定,另一列宽度是自适应. 1.float+overflow:auto; 固定端用float进行浮动,自适应的用overflow:a ...

  6. js 回顾知识总结一

    1.js数据类型? 基本数据类型:String(字符串).boolean(布尔值).Number(数字).undefined(未定义).null(空) 引用数据类型:Object(对象).Array( ...

  7. ios 动画:底部标签栏的概念设计

    本文汇集了大量优秀的ios底部标签栏动效设计,并附上技术实现的指南,对于设计师和开发者都提供了很好的灵感来源和学习资源. 我们每天都见到tab bars,它们指引用户,使得他们能够快速在不同的tab中 ...

  8. lightinthebox程序bug zencart

    1.清空旧产品分类,新增分类与产品,前台首页不显示中间栏,提示无产品:布局设置 -(Main Page - Opens with Category)首页显示某分类,把新增的某分类ID填上或者设为0即可 ...

  9. 【51nod1672】区间交

    题目大意:给定一个长度为 N 的序列,以及 M 个区间,现从中选出 K 个区间,使得这些区间的交集区间的点权和最大,求最大值是多少. 题解: 发现直接选 K 个区间不可做,考虑从答案入手.设答案区间为 ...

  10. Spring资源

    资源 官网:http://spring.io 文档:https://docs.spring.io/spring/docs/current/spring-framework-reference/.htt ...