oracle存储过程及sql优化-(三)
接下来介绍上篇接触到的存储过程中的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优化-(三)的更多相关文章
- oracle存储过程及sql优化-(一)
本篇主要介绍存储过程的结构 先简单介绍下: oracle存储过程与函数不同,oracle函数和存储过程都可以有多个输入,但是函数一般只有一个输出,而oracle可以有多个输出且与输入 ...
- oracle存储过程及sql优化-(二)
接下来比较重要,我会先贴出一个存储过程,根据这个存储过程讲解 PROCEDURE AP_CXBB_GT3_SBFGL_SBFYJSQC (OUT_RECORD OUT SYS_REFCURSOR, P ...
- oracle 存储过程 动态sql语句
一.在oracle项目开发中越到问题: 在利用ODP向oracle中插入数据时,如果这样写: insert into clobTable (id, story) values(1,'....'); ...
- oracle中的SQL优化
一.SQL语言的使用1.IN 操作符 用IN写出来的SQL的优点是比较容易写及清晰易懂,这比较适合现代软件开发的风格. 但是用IN的SQL性能总是比较低的,从ORACLE执行的步骤来分析用 ...
- oracle存储过程,sql语句执行时间
create or replace procedure sum_info is i integer; temp1 varchar2(50); temp2 varchar2(50); t1 date; ...
- Sql优化(三) 关于oracle的并发
Oracle的并发技术可以将一个大任务分解为多个小任务由多个进程共同完成.合理地使用并发可以充分利用系统资源,提高效率.一. 并发的种类Parallel queryParallel DML(PDML) ...
- 基于Oracle的SQL优化(社区万众期待 数据库优化扛鼎巨著)
基于Oracle的SQL优化(社区万众期待数据库优化扛鼎巨著) 崔华 编 ISBN 978-7-121-21758-6 2014年1月出版 定价:128.00元 856页 16开 编辑推荐 本土O ...
- 对oracle中SQL优化的理解
Oracle数据库里SQL优化的终极目标就是要缩短目标SQL语句的执行时间.要达到上述目的,我们通常只有如下三种方法可以选择:1.降低目标SQL语句的资源消耗.2.并行执行目标SQL语句.3.平衡系统 ...
- Oracle 表三种连接方式(sql优化)
在查看sql执行计划时,我们会发现表的连接方式有多种,本文对表的连接方式进行介绍以便更好看懂执行计划和理解sql执行原理. 一.连接方式: 嵌套循环(Nested Loops (NL)) (散列)哈希 ...
随机推荐
- ASP.NET Core[源码分析篇] - Authentication认证
原文:ASP.NET Core[源码分析篇] - Authentication认证 追本溯源,从使用开始 首先看一下我们通常是如何使用微软自带的认证,一般在Startup里面配置我们所需的依赖认证服务 ...
- leetcode 1282. Group the People Given the Group Size They Belong To
There are n people whose IDs go from 0 to n - 1 and each person belongs exactly to one group. Given ...
- Django框架——基础教程(总)
1. Django简介 Python下有许多款不同的 Web 框架.Django是重量级选手中最有代表性的一位.许多成功的网站和APP都基于Django. Django是一个开放源代码的Web应用框架 ...
- GO语言(golang)官方网站!
GO语言官方网站,在上面可以查看所有API文档.使用在线工具编写程序,你可以去看看!! https://golang.org/
- zabbix监控,微信报警
微信告警 访问这个地址创建企业微信 https://work.weixin.qq.com/
- Kay and Snowflake CodeForces - 686D (树的重心性质)
After the piece of a devilish mirror hit the Kay's eye, he is no longer interested in the beauty of ...
- 最长回文子串(动规,中心扩散法,Manacher算法)
题目 leetcode:5. Longest Palindromic Substring 解法 动态规划 时间复杂度\(O(n^2)\),空间复杂度\(O(n^2)\) 基本解法直接看代码 class ...
- 数字转化为汉字,如5->五
//数字转化为汉字 如5-->五-(NSString*)translation:(NSString *)arebic{ NSString *str = arebic; NSArray ...
- 本地安装sass出错问题解析
2016年3月23日个人博客文章--迁移到segmentfault 安装sass ruby安装因为sass依赖于ruby环境,所以装sass之前先确认装了ruby.先导官网下载个ruby 在安装的时候 ...
- MyEclipse使用教程:添加和更新插件(二)
[MyEclipse CI 2019.4.0安装包下载] 通过Eclipse Marketplace目录或各种更新站点类型添加插件来自定义您的Genuitec IDE. Genuitec提供以下IDE ...