接下来介绍上篇接触到的存储过程中的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. 数据库oracle行列的操作(MiTAC)

    1.两个重要的网址(参考): http://lovejuan1314.iteye.com/blog/413694http://www.cnblogs.com/heekui/archive/2009/0 ...

  2. 四、redis学习(案例)

    效果如下 注意:必须要开启redis服务器端 数据库 CREATE DATABASE heima; -- 创建数据库 USE heima; -- 使用数据库 CREATE TABLE province ...

  3. O012、Linux如何实现VLAN

    参考https://www.cnblogs.com/CloudMan6/p/5313994.html   LAN 表示 Local Area Network ,本地局域网,通常使用 Hub 或者 Sw ...

  4. 埋在 MYSQL 数据库应用中的17个关键问题!

    Mysql的使用非常普遍,跟mysql有关的话题也非常多,如性能优化.高可用性.强一致性.安全.备份.集群.横向扩展.纵向扩展.负载均衡.读写分离等.要想掌握其中的精髓,可得花费不少功力,虽然目前流行 ...

  5. 03 Redis发布与订阅

    以qq群的公告,单个发布者,多个收听者为例 发布/订阅 实验 发布订阅的命令 PUBLISH channel msg 将信息 message 发送到指定的频道 channel SUBSCRIBE ch ...

  6. echarts图表自适应盒子的大小(盒子的大小是动态改变的),大到需要全屏展示

    项目中用到了echarts,并且页面是自适应的,且页面中有一个[放大.缩小]功能,因此图表还需要根据盒子的大小来变化. 即:两个需求,如下: ① 图表根据窗口的大小自适应 ② 图表根据所在盒子的大小自 ...

  7. maven学习之路二(2)

    上次我介绍到mybaties generator 这款mybaties的插件.这次我简单介绍下这款插件: <plugin> <groupId>org.mybatis.gener ...

  8. 17AJAX&JSON

    1. 概念 ASynchronous JavaScript And XML    异步的JavaScript 和 XML1. 异步和同步:客户端和服务器端相互通信的基础上 客户端必须等待服务器端的响应 ...

  9. 设置ecShop网店用户名和email均可登录

    修改user.php文件,如果您网站的该文件修改过,按照下面的修改说明修改文件. 查找代码:elseif ($action == 'act_login') 在:$back_act = isset($_ ...

  10. 介绍知道的http返回的状态码

    100    Continue    继续.客户端应继续其请求 101    Switching Protocols    切换协议.服务器根据客户端的请求切换协议.只能切换到更高级的协议,例如,切换 ...