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 子句中使用!=或<>操作符,否则将引擎放弃使用索 ...
随机推荐
- JSP页面跳转之sendRedirect()与forward()辨析
转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6044817.html 在JSP中,要实现页面的跳转,主要有两种方式实现:forward和sendRedire ...
- Ubuntu14.04设置开机自启动脚本
方法一.编辑rc.loacl脚本 Ubuntu开机之后会执行/etc/rc.local文件中的脚本,所以我们可以直接在/etc/rc.local中添加启动脚本.在 exit 0 前面添加好脚本代码, ...
- excel 上标和下标
开始--字体--设置单元格格式--上标/下标
- C++高性能转换大小写算法
简述 有一个需求,是需要将URL中的query参数的key全部转换为小写或者大写,键值对的数量有点多,但全部都是英文字母,无需考虑非字母的情况. 实现比较快的做法是使用STL或C标准库中的转换接口,如 ...
- php函数method_exists() 与is_callable()区别
php函数method_exists()与is_callable()的区别在哪?在php面相对象设计过程中,往往我们需要在调用某一个方法是否属于某一个类的时候做出判断,常用的方法有method_exi ...
- 【jquery】ajax 动态 改变 select下拉框选中的值
//JS<script type="text/javascript> //ajax动态给添加原料的[商品名称]下拉框绑定selected属性 $("#origin_co ...
- firefox插件卸载
1.根据插件名进行搜索,搜索到相关dll后删除,重启firefox. 2.about:config--plugin.expose_full_path:true,然后about:plugins去查看插件 ...
- Xcode使用小技巧-filter查找功能和查看最近修改的文件
今天偶然发现了关于Xcode的一个小技巧: 1.查看最近修改的文件 2.使用filter查找制定文件 没错,就是下面这个东西,很容易忽略的一个小工具,在Xcode左下角位置. 通过这个,我们能够在整个 ...
- 关于UDP-读这篇就够了(疑难杂症和使用)
本文为转载文章 原文链接:https://www.qcloud.com/community/article/848077001486437077 版权归原文所有 关于UDP 面向报文的传输方式决定了U ...
- SQLserver视图修改sql
语法: alter view dbo.视图名 as 更新后的视图SQL go 举个栗子: 原视图名为YOUR_VIEW其中SQL为: select * form TableA 更新视图: alter ...