sql 优化 -- sql中的自定函数
Long run sql:
MERGE INTO INTITMRTNPARAM D
USING (
SELECT A.INRFILENM,A.INRSTAT,A.INRDEPCD,A.INRITMCD,A.INRSUBCD,A.INRSUPCD,A.INRSTOCD
FROM INTITMRTNPARAM A,INTITMRTNPARAM B
WHERE 1=1
AND A.ROWID <> B.ROWID
AND A.INRFILENM = B.INRFILENM
AND A.INRSTAT = 0
AND B.INRSTAT = 0
AND A.INRFILENM = p_filenm
AND B.INRFILENM = p_filenm
AND A.INRDEPCD = B.INRDEPCD
AND A.INRITMCD = B.INRITMCD
AND PKCRS.CHECKINCLUDECUSTTYPE(NVL(A.INRSUBCD,'ALL'),NVL(B.INRSUBCD,'ALL')) = 1
AND PKCRS.CHECKINCLUDECUSTTYPE(NVL(A.INRSUPCD,'ALL'),NVL(B.INRSUPCD,'ALL')) = 1
AND PKCRS.CHECKINCLUDECUSTTYPE(NVL(A.INRSTOCD,'ALL'),NVL(B.INRSTOCD,'ALL')) = 1
GROUP BY A.INRFILENM,A.INRSTAT,A.INRDEPCD,A.INRITMCD,A.INRSUBCD,A.INRSUPCD,A.INRSTOCD
) E
ON ( D.INRFILENM = E.INRFILENM
AND D.INRSTAT = E.INRSTAT
AND D.INRDEPCD = E.INRDEPCD
AND D.INRITMCD = E.INRITMCD
AND DECODE(TRIM(NVL(D.INRSUBCD,'')),'','NULL',TRIM(D.INRSUBCD)) = DECODE(TRIM(NVL(E.INRSUBCD,'')),'','NULL',TRIM(E.INRSUBCD))
AND DECODE(TRIM(NVL(D.INRSUPCD,'')),'','NULL',TRIM(D.INRSUPCD)) = DECODE(TRIM(NVL(E.INRSUPCD,'')),'','NULL',TRIM(E.INRSUPCD))
AND DECODE(TRIM(NVL(D.INRSTOCD,'')),'','NULL',TRIM(D.INRSTOCD)) = DECODE(TRIM(NVL(E.INRSTOCD,'')),'','NULL',TRIM(E.INRSTOCD)) )
WHEN MATCHED THEN
UPDATE SET D.INRERRNO = 2,
D.INRERRMES = D.INRERRMES || ', Dupplicate item',
D.INRUPD = p_date,
D.INRUSR = p_user;
Long sql 中调用的function(checkIncludeCustType):
FUNCTION checkIncludeCustType(p_custType1 PRITSPHDR.TSPHCUSTYPE%TYPE,p_custType2 PRITSPHDR.TSPHCUSTYPE%TYPE) RETURN NUMBER IS
v_check NUMBER(1);
BEGIN
IF p_custType2 IS NULL OR p_custType1 IS NULL THEN
RETURN 1;
END IF;
BEGIN
SELECT 1
INTO v_check
FROM (SELECT LEVEL,
SUBSTR (
STRING_TO_TOKENIZE,
DECODE(LEVEL, 1, 1, INSTR(STRING_TO_TOKENIZE, DELIMITER, 1, LEVEL-1)+1),
INSTR(STRING_TO_TOKENIZE, DELIMITER, 1, LEVEL) - DECODE(LEVEL, 1, 1, INSTR(STRING_TO_TOKENIZE, DELIMITER, 1, LEVEL-1)+1)
) AS Token
FROM ( SELECT p_custType1||',' AS STRING_TO_TOKENIZE, ',' AS DELIMITER FROM DUAL)
CONNECT BY INSTR(STRING_TO_TOKENIZE, DELIMITER, 1, LEVEL)>0
ORDER BY LEVEL ASC
) custtype1,
(SELECT LEVEL,
SUBSTR ( STRING_TO_TOKENIZE,
DECODE(LEVEL, 1, 1, INSTR(STRING_TO_TOKENIZE, DELIMITER, 1, LEVEL-1)+1),
INSTR(STRING_TO_TOKENIZE, DELIMITER, 1, LEVEL) - DECODE(LEVEL, 1, 1, INSTR(STRING_TO_TOKENIZE, DELIMITER, 1, LEVEL-1)+1)
) AS Token
FROM ( SELECT p_custType2||',' AS STRING_TO_TOKENIZE, ',' AS DELIMITER FROM DUAL)
CONNECT BY INSTR(STRING_TO_TOKENIZE, DELIMITER, 1, LEVEL)>0
ORDER BY LEVEL ASC
) custtype2
WHERE custtype1.token = custtype2.token
AND rownum = 1;
EXCEPTION WHEN NO_DATA_FOUND THEN
v_check := 0;
END;
RETURN v_check;
END checkIncludeCustType;
优化后:
UPDATE INTITMRTNCON D
SET D.INRERRNO = 2, D.INRERRMES = D.INRERRMES || ', Dupplicate item' , D.INRUPD = p_date, D.INRUSR = p_user
WHERE INRFILENM = p_filenm AND INRSTAT = 0
AND (INRFILENM, INRSTAT, INRDPCD, INRITMCD, NVL(INRSUBCD, 'ALL'),
NVL(INRSUPCD, 'ALL')) IN
(SELECT INRFILENM, INRSTAT, INRDPCD, INRITMCD, NVL(INRSUBCD, 'ALL'), NVL(INRSUPCD, 'ALL')
FROM (SELECT T.INRFILENM, T.INRSTAT, T.INRDPCD, T.INRITMCD, T.INRSUBCD, T.INRSUPCD
FROM INTITMRTNCON T
WHERE INSTR(nvl(trim(INRSUBCD), 'ALL'), ',') = 0
and INSTR(nvl(trim(INRSUPCD), 'ALL'), ',') = 0
AND INRFILENM = p_filenm AND INRSTAT = 0
UNION ALL
select a.INRFILENM, a.INRSTAT, a.INRDPCD, a.INRITMCD, a.INRSUBCD, b.INRSUPCD
from (SELECT SUBSTR(STRING_TO_TOKENIZE,
DECODE(LEVEL, 1, 1, INSTR(STRING_TO_TOKENIZE, DELIMITER,
1, LEVEL - 1) + 1),
INSTR(STRING_TO_TOKENIZE, DELIMITER, 1, LEVEL) -
DECODE(LEVEL, 1, 1, INSTR(STRING_TO_TOKENIZE, DELIMITER,
1, LEVEL - 1) + 1))
AS INRSUBCD,
V_ROWID, INRFILENM, INRSTAT, INRDPCD, INRITMCD
FROM (SELECT T.INRSUBCD || ',' AS STRING_TO_TOKENIZE,
',' AS DELIMITER, T.ROWID V_ROWID, INRFILENM,
INRSTAT, INRDPCD, INRITMCD
FROM INTITMRTNCON T
WHERE INRFILENM = p_filenm AND INRSTAT = 0 AND (INSTR(INRSUBCD, ',') >= 1
or INSTR(INRSUPCD, ',') >= 1))
CONNECT BY INSTR(STRING_TO_TOKENIZE, DELIMITER, 1, LEVEL) > 0) a,
(SELECT SUBSTR(STRING_TO_TOKENIZE,
DECODE(LEVEL, 1, 1, INSTR(STRING_TO_TOKENIZE, DELIMITER, 1, LEVEL - 1) + 1),
INSTR(STRING_TO_TOKENIZE, DELIMITER, 1, LEVEL) -
DECODE(LEVEL, 1, 1, INSTR(STRING_TO_TOKENIZE, DELIMITER, 1, LEVEL - 1) + 1)) AS INRSUPCD,
V_ROWID, INRFILENM, INRSTAT, INRDPCD, INRITMCD
FROM (SELECT T.INRSUPCD || ',' AS STRING_TO_TOKENIZE, ',' AS DELIMITER,
T.ROWID V_ROWID, INRFILENM, INRSTAT, INRDPCD, INRITMCD
FROM INTITMRTNCON T
WHERE INRFILENM = p_filenm AND INRSTAT = 0 AND (INSTR(INRSUBCD, ',') >= 1
or INSTR(INRSUPCD, ',') >= 1 ))
CONNECT BY INSTR(STRING_TO_TOKENIZE, DELIMITER, 1, LEVEL) > 0) b
where a.v_rowid = b.v_rowid)
GROUP BY INRFILENM, INRSTAT, INRDPCD, INRITMCD, INRSUBCD, INRSUPCD
HAVING COUNT(*) > 1);
sql 优化 -- sql中的自定函数的更多相关文章
- SQL优化过程中常见Oracle HINT
在SQL语句优化过程中,我们经常会用到hint,现总结一下在SQL优化过程中常见Oracle HINT的用法: 1. /*+ALL_ROWS*/ 表明对语句块选择基于开销的优化方法,并获得最佳吞吐量, ...
- 面试题: 数据库 sql优化 sql练习题 有用 学生表,课程表,成绩表,教师表 练习
什么是存储过程?有哪些优缺点? 什么是存储过程?有哪些优缺点? 存储过程就像我们编程语言中的函数一样,封装了我们的代码(PLSQL.T-SQL). 存储过程的优点: 能够将代码封装起来 保存在数据库之 ...
- SQL优化 | sql执行过长的时间,如何优化?
1.查看sql是否涉及多表的联表或者子查询,如果有,看是否能进行业务拆分,相关字段冗余或者合并成临时表(业务和算法的优化) 2.涉及链表的查询,是否能进行分表查询,单表查询之后的结果进行字段整合 3. ...
- SQL 优化SQL查询
摘至于:http://www.cnblogs.com/ATree/archive/2011/02/13/sql_optimize_1.html 1. 首先要搞明白什么叫执行计划? 执行计划是数据库根据 ...
- SQL优化SQL tuning
1. 索引不合适,走主键进行了key lookup查找 说明索引没有覆盖到where条件 或者 orderby 或者 group by的列
- 深入了解 TiDB SQL 优化器
分享嘉宾:张建 PingCAP TiDB优化器与执行引擎技术负责人 编辑整理:Druid中国用户组第6次大数据MeetUp 出品平台:DataFunTalk 导读: 本次报告张老师主要从原理上带大家深 ...
- ORACLE常用SQL优化hint语句
在SQL语句优化过程中,我们经常会用到hint,现总结一下在SQL优化过程中常见Oracle HINT的用法: 1. /*+ALL_ROWS*/ 表明对语句块选择基于开销的优化方法,并获得最佳吞吐量, ...
- MySQL中优化sql语句查询常用的30种方法
1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使 ...
- MySQL中优化sql语句查询常用的种方法
1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索 ...
随机推荐
- node.js 标准/错误输出 和 process.exit
node.js中,各种模块有一种标准的写法: this._process.exec(command, options, function (err, stdout, stderr) { callbac ...
- 【Excle】一个比VLOOKUP牛的函数LOOKUP
1.根据时间查找最近发生的交易 2.多条件查找 3.反向查找 4.模糊匹配 上述例子充分说明了LOOKUP的查找特技,点击下载上述案例对应的Excle
- django之异常错误3(Student matching query does not exist.)
错误提示: DoesNotExist at /blog/test2/ Student matching query does not exist. 说明:错误提示说明错误在test2中,查找数据库的表 ...
- vmware中的 CentOS7 虚机磁盘动态扩容
0.在vmware的配置项中,将虚机的磁盘大小调大,步骤简单,此处略 查看当前状态 文件系统状态 df -h 磁盘状态 lsblkfdisk -l 1.首先要再创建一个物理分区 (使用fdisk ...
- HTML5音频audio属性
来源:https://segmentfault.com/a/1190000008932943?utm_source=tuicool&utm_medium=referral audio 的控制函 ...
- Mysql中字符串正确的连接方法
虽然SQL server和My sql的语句基本都一致,但是仍然存在一些小区别.就如字符串的连接来说,SQL server中的字符串连接是使用“+”来连接,不带引号sql server是做加法运算.而 ...
- [POST] What Is the Linux fstab File, and How Does It Work?
If you’re running Linux, then it’s likely that you’ve needed to change some options for your file sy ...
- 【LeetCode】3. Longest Substring Without Repeating Characters (2 solutions)
Longest Substring Without Repeating Characters Given a string, find the length of the longest substr ...
- zabbix3.0 安装时出现PHP Parse error: syntax error
httpd的错误日志 [Sun Mar :: ] [error] [client 由于系统yum默认安装的php版本是5.3.3 zabbix 3.0支持的平台,只支持php5.4以上的版本https ...
- 树莓派进阶之路 (012) - 关于Raspberry Pi树莓派无线网卡配置
Raspberry Pi树莓派无线网卡配置[多重方法备选] 要想让树莓派方便操作,肯定需要配置无线网卡,这样可以大大增强树莓派的移动性和便利性,其实配置无线网卡基本就是和普通linux平台下配置无线网 ...