Long run sql:

  1. MERGE INTO INTITMRTNPARAM D
  2. USING (
  3. SELECT A.INRFILENM,A.INRSTAT,A.INRDEPCD,A.INRITMCD,A.INRSUBCD,A.INRSUPCD,A.INRSTOCD
  4. FROM INTITMRTNPARAM A,INTITMRTNPARAM B
  5. WHERE 1=1
  6. AND A.ROWID <> B.ROWID
  7. AND A.INRFILENM = B.INRFILENM
  8. AND A.INRSTAT = 0
  9. AND B.INRSTAT = 0
  10. AND A.INRFILENM = p_filenm
  11. AND B.INRFILENM = p_filenm
  12. AND A.INRDEPCD = B.INRDEPCD
  13. AND A.INRITMCD = B.INRITMCD
  14. AND PKCRS.CHECKINCLUDECUSTTYPE(NVL(A.INRSUBCD,'ALL'),NVL(B.INRSUBCD,'ALL')) = 1
  15. AND PKCRS.CHECKINCLUDECUSTTYPE(NVL(A.INRSUPCD,'ALL'),NVL(B.INRSUPCD,'ALL')) = 1
  16. AND PKCRS.CHECKINCLUDECUSTTYPE(NVL(A.INRSTOCD,'ALL'),NVL(B.INRSTOCD,'ALL')) = 1
  17. GROUP BY A.INRFILENM,A.INRSTAT,A.INRDEPCD,A.INRITMCD,A.INRSUBCD,A.INRSUPCD,A.INRSTOCD
  18. ) E
  19. ON ( D.INRFILENM = E.INRFILENM
  20. AND D.INRSTAT = E.INRSTAT
  21. AND D.INRDEPCD = E.INRDEPCD
  22. AND D.INRITMCD = E.INRITMCD
  23. AND DECODE(TRIM(NVL(D.INRSUBCD,'')),'','NULL',TRIM(D.INRSUBCD)) = DECODE(TRIM(NVL(E.INRSUBCD,'')),'','NULL',TRIM(E.INRSUBCD))
  24. AND DECODE(TRIM(NVL(D.INRSUPCD,'')),'','NULL',TRIM(D.INRSUPCD)) = DECODE(TRIM(NVL(E.INRSUPCD,'')),'','NULL',TRIM(E.INRSUPCD))
  25. AND DECODE(TRIM(NVL(D.INRSTOCD,'')),'','NULL',TRIM(D.INRSTOCD)) = DECODE(TRIM(NVL(E.INRSTOCD,'')),'','NULL',TRIM(E.INRSTOCD)) )
  26. WHEN MATCHED THEN
  27. UPDATE SET D.INRERRNO = 2,
  28. D.INRERRMES = D.INRERRMES || ', Dupplicate item',
  29. D.INRUPD = p_date,
  30. D.INRUSR = p_user;

Long sql 中调用的function(checkIncludeCustType):

  1. FUNCTION checkIncludeCustType(p_custType1 PRITSPHDR.TSPHCUSTYPE%TYPE,p_custType2 PRITSPHDR.TSPHCUSTYPE%TYPE) RETURN NUMBER IS
  2. v_check NUMBER(1);
  3. BEGIN
  4. IF p_custType2 IS NULL OR p_custType1 IS NULL THEN
  5. RETURN 1;
  6. END IF;
  7. BEGIN
  8. SELECT 1
  9. INTO v_check
  10. FROM (SELECT LEVEL,
  11. SUBSTR (
  12. STRING_TO_TOKENIZE,
  13. DECODE(LEVEL, 1, 1, INSTR(STRING_TO_TOKENIZE, DELIMITER, 1, LEVEL-1)+1),
  14. INSTR(STRING_TO_TOKENIZE, DELIMITER, 1, LEVEL) - DECODE(LEVEL, 1, 1, INSTR(STRING_TO_TOKENIZE, DELIMITER, 1, LEVEL-1)+1)
  15. ) AS Token
  16. FROM ( SELECT p_custType1||',' AS STRING_TO_TOKENIZE, ',' AS DELIMITER FROM DUAL)
  17. CONNECT BY INSTR(STRING_TO_TOKENIZE, DELIMITER, 1, LEVEL)>0
  18. ORDER BY LEVEL ASC
  19. ) custtype1,
  20. (SELECT LEVEL,
  21. SUBSTR ( STRING_TO_TOKENIZE,
  22. DECODE(LEVEL, 1, 1, INSTR(STRING_TO_TOKENIZE, DELIMITER, 1, LEVEL-1)+1),
  23. INSTR(STRING_TO_TOKENIZE, DELIMITER, 1, LEVEL) - DECODE(LEVEL, 1, 1, INSTR(STRING_TO_TOKENIZE, DELIMITER, 1, LEVEL-1)+1)
  24. ) AS Token
  25. FROM ( SELECT p_custType2||',' AS STRING_TO_TOKENIZE, ',' AS DELIMITER FROM DUAL)
  26. CONNECT BY INSTR(STRING_TO_TOKENIZE, DELIMITER, 1, LEVEL)>0
  27. ORDER BY LEVEL ASC
  28. ) custtype2
  29. WHERE custtype1.token = custtype2.token
  30. AND rownum = 1;
  31. EXCEPTION WHEN NO_DATA_FOUND THEN
  32. v_check := 0;
  33. END;
  34. RETURN v_check;
  35. END checkIncludeCustType;

优化后:

  1. UPDATE INTITMRTNCON D
  2. SET D.INRERRNO = 2, D.INRERRMES = D.INRERRMES || ', Dupplicate item' , D.INRUPD = p_date, D.INRUSR = p_user
  3. WHERE INRFILENM = p_filenm AND INRSTAT = 0
  4. AND (INRFILENM, INRSTAT, INRDPCD, INRITMCD, NVL(INRSUBCD, 'ALL'),
  5. NVL(INRSUPCD, 'ALL')) IN
  6. (SELECT INRFILENM, INRSTAT, INRDPCD, INRITMCD, NVL(INRSUBCD, 'ALL'), NVL(INRSUPCD, 'ALL')
  7. FROM (SELECT T.INRFILENM, T.INRSTAT, T.INRDPCD, T.INRITMCD, T.INRSUBCD, T.INRSUPCD
  8. FROM INTITMRTNCON T
  9. WHERE INSTR(nvl(trim(INRSUBCD), 'ALL'), ',') = 0
  10. and INSTR(nvl(trim(INRSUPCD), 'ALL'), ',') = 0
  11. AND INRFILENM = p_filenm AND INRSTAT = 0
  12. UNION ALL
  13. select a.INRFILENM, a.INRSTAT, a.INRDPCD, a.INRITMCD, a.INRSUBCD, b.INRSUPCD
  14. from (SELECT SUBSTR(STRING_TO_TOKENIZE,
  15. DECODE(LEVEL, 1, 1, INSTR(STRING_TO_TOKENIZE, DELIMITER,
  16. 1, LEVEL - 1) + 1),
  17. INSTR(STRING_TO_TOKENIZE, DELIMITER, 1, LEVEL) -
  18. DECODE(LEVEL, 1, 1, INSTR(STRING_TO_TOKENIZE, DELIMITER,
  19. 1, LEVEL - 1) + 1))
  20. AS INRSUBCD,
  21. V_ROWID, INRFILENM, INRSTAT, INRDPCD, INRITMCD
  22. FROM (SELECT T.INRSUBCD || ',' AS STRING_TO_TOKENIZE,
  23. ',' AS DELIMITER, T.ROWID V_ROWID, INRFILENM,
  24. INRSTAT, INRDPCD, INRITMCD
  25. FROM INTITMRTNCON T
  26. WHERE INRFILENM = p_filenm AND INRSTAT = 0 AND (INSTR(INRSUBCD, ',') >= 1
  27. or INSTR(INRSUPCD, ',') >= 1))
  28. CONNECT BY INSTR(STRING_TO_TOKENIZE, DELIMITER, 1, LEVEL) > 0) a,
  29. (SELECT SUBSTR(STRING_TO_TOKENIZE,
  30. DECODE(LEVEL, 1, 1, INSTR(STRING_TO_TOKENIZE, DELIMITER, 1, LEVEL - 1) + 1),
  31. INSTR(STRING_TO_TOKENIZE, DELIMITER, 1, LEVEL) -
  32. DECODE(LEVEL, 1, 1, INSTR(STRING_TO_TOKENIZE, DELIMITER, 1, LEVEL - 1) + 1)) AS INRSUPCD,
  33. V_ROWID, INRFILENM, INRSTAT, INRDPCD, INRITMCD
  34. FROM (SELECT T.INRSUPCD || ',' AS STRING_TO_TOKENIZE, ',' AS DELIMITER,
  35. T.ROWID V_ROWID, INRFILENM, INRSTAT, INRDPCD, INRITMCD
  36. FROM INTITMRTNCON T
  37. WHERE INRFILENM = p_filenm AND INRSTAT = 0 AND (INSTR(INRSUBCD, ',') >= 1
  38. or INSTR(INRSUPCD, ',') >= 1 ))
  39. CONNECT BY INSTR(STRING_TO_TOKENIZE, DELIMITER, 1, LEVEL) > 0) b
  40. where a.v_rowid = b.v_rowid)
  41. GROUP BY INRFILENM, INRSTAT, INRDPCD, INRITMCD, INRSUBCD, INRSUPCD
  42. HAVING COUNT(*) > 1);

sql 优化 -- sql中的自定函数的更多相关文章

  1. SQL优化过程中常见Oracle HINT

    在SQL语句优化过程中,我们经常会用到hint,现总结一下在SQL优化过程中常见Oracle HINT的用法: 1. /*+ALL_ROWS*/ 表明对语句块选择基于开销的优化方法,并获得最佳吞吐量, ...

  2. 面试题: 数据库 sql优化 sql练习题 有用 学生表,课程表,成绩表,教师表 练习

    什么是存储过程?有哪些优缺点? 什么是存储过程?有哪些优缺点? 存储过程就像我们编程语言中的函数一样,封装了我们的代码(PLSQL.T-SQL). 存储过程的优点: 能够将代码封装起来 保存在数据库之 ...

  3. SQL优化 | sql执行过长的时间,如何优化?

    1.查看sql是否涉及多表的联表或者子查询,如果有,看是否能进行业务拆分,相关字段冗余或者合并成临时表(业务和算法的优化) 2.涉及链表的查询,是否能进行分表查询,单表查询之后的结果进行字段整合 3. ...

  4. SQL 优化SQL查询

    摘至于:http://www.cnblogs.com/ATree/archive/2011/02/13/sql_optimize_1.html 1. 首先要搞明白什么叫执行计划? 执行计划是数据库根据 ...

  5. SQL优化SQL tuning

    1. 索引不合适,走主键进行了key lookup查找   说明索引没有覆盖到where条件 或者  orderby 或者 group by的列

  6. 深入了解 TiDB SQL 优化器

    分享嘉宾:张建 PingCAP TiDB优化器与执行引擎技术负责人 编辑整理:Druid中国用户组第6次大数据MeetUp 出品平台:DataFunTalk 导读: 本次报告张老师主要从原理上带大家深 ...

  7. ORACLE常用SQL优化hint语句

    在SQL语句优化过程中,我们经常会用到hint,现总结一下在SQL优化过程中常见Oracle HINT的用法: 1. /*+ALL_ROWS*/ 表明对语句块选择基于开销的优化方法,并获得最佳吞吐量, ...

  8. MySQL中优化sql语句查询常用的30种方法

      1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使 ...

  9. MySQL中优化sql语句查询常用的种方法

    1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索 ...

随机推荐

  1. JSP页面跳转之sendRedirect()与forward()辨析

    转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6044817.html  在JSP中,要实现页面的跳转,主要有两种方式实现:forward和sendRedire ...

  2. Ubuntu14.04设置开机自启动脚本

    方法一.编辑rc.loacl脚本  Ubuntu开机之后会执行/etc/rc.local文件中的脚本,所以我们可以直接在/etc/rc.local中添加启动脚本.在 exit 0 前面添加好脚本代码, ...

  3. excel 上标和下标

    开始--字体--设置单元格格式--上标/下标

  4. C++高性能转换大小写算法

    简述 有一个需求,是需要将URL中的query参数的key全部转换为小写或者大写,键值对的数量有点多,但全部都是英文字母,无需考虑非字母的情况. 实现比较快的做法是使用STL或C标准库中的转换接口,如 ...

  5. php函数method_exists() 与is_callable()区别

    php函数method_exists()与is_callable()的区别在哪?在php面相对象设计过程中,往往我们需要在调用某一个方法是否属于某一个类的时候做出判断,常用的方法有method_exi ...

  6. 【jquery】ajax 动态 改变 select下拉框选中的值

    //JS<script type="text/javascript> //ajax动态给添加原料的[商品名称]下拉框绑定selected属性 $("#origin_co ...

  7. firefox插件卸载

    1.根据插件名进行搜索,搜索到相关dll后删除,重启firefox. 2.about:config--plugin.expose_full_path:true,然后about:plugins去查看插件 ...

  8. Xcode使用小技巧-filter查找功能和查看最近修改的文件

    今天偶然发现了关于Xcode的一个小技巧: 1.查看最近修改的文件 2.使用filter查找制定文件 没错,就是下面这个东西,很容易忽略的一个小工具,在Xcode左下角位置. 通过这个,我们能够在整个 ...

  9. 关于UDP-读这篇就够了(疑难杂症和使用)

    本文为转载文章 原文链接:https://www.qcloud.com/community/article/848077001486437077 版权归原文所有 关于UDP 面向报文的传输方式决定了U ...

  10. SQLserver视图修改sql

    语法: alter view dbo.视图名 as 更新后的视图SQL go 举个栗子: 原视图名为YOUR_VIEW其中SQL为:  select * form TableA 更新视图: alter ...