Java自学者论坛

 找回密码
 立即注册

手机号码,快捷登录

恭喜Java自学者论坛(https://www.javazxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,会员资料板块,购买链接:点击进入购买VIP会员

JAVA高级面试进阶训练营视频教程

Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程Go语言视频零基础入门到精通Java架构师3期(课件+源码)
Java开发全终端实战租房项目视频教程SpringBoot2.X入门到高级使用教程大数据培训第六期全套视频教程深度学习(CNN RNN GAN)算法原理Java亿级流量电商系统视频教程
互联网架构师视频教程年薪50万Spark2.0从入门到精通年薪50万!人工智能学习路线教程年薪50万大数据入门到精通学习路线年薪50万机器学习入门到精通教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程MySQL入门到精通教程
查看: 377|回复: 0

oracle 捕获异常,不中断游标循环

[复制链接]
  • TA的每日心情
    奋斗
    3 天前
  • 签到天数: 756 天

    [LV.10]以坛为家III

    2034

    主题

    2092

    帖子

    70万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    707560
    发表于 2021-6-8 23:26:43 | 显示全部楼层 |阅读模式

    2016-04-20

    昨天晚上,在用全文索引匹配关键词列表,进行查询时,不断报错。oracle的全文索引对关键字有很多的限制,为了能够正常查询出数据,得找出有问题的关键词。因为关键词列表有3000多个,一个个去检查是否有语法错误不太现实,而且工作量也大,所以想到用存储过程去捕获查询时的异常,并在有异常的地方,把有问题的关键词输出。以下是用到的过程。

    CREATE OR REPLACE PROCEDURE sp_etl_pc_tmp_ms_201504_10 as
    
      v_ms gather.tmp_ms_201504_10_test%ROWTYPE;
      TYPE cur_type is REF CURSOR;
      c_tab       cur_type;
      v_sql       varchar2(4000);
      v_str       varchar2(250);
      v_startdate date;
      v_enddate   date;
    
    BEGIN
      v_sql       := 'select * from gather.web_action_basic a
                     where contains(a.windows, :v1,0) > 0
                 and a.day_date between :v2 and :v3 ';
      v_startdate := to_date('2015-04-01', 'YYYY-MM-DD');
      v_enddate   := to_date('2015-04-02', 'YYYY-MM-DD');
      FOR i IN (SELECT * FROM gather.keyword_ms_ap WHERE proj_name = 'Microsoft') LOOP
        BEGIN
          v_str := i.keywords;
          OPEN c_tab FOR v_sql
            USING v_str, v_startdate, v_enddate;
        
          LOOP
            FETCH c_tab
              INTO v_ms;
            EXIT WHEN c_tab%NOTFOUND;
            NULL;
          END LOOP;
          CLOSE c_tab;
        
        EXCEPTION
          WHEN others THEN
            dbms_output.put_line('keywords = ' || v_str);
        END;
      END LOOP;
    END;

    测试脚本跑完,找出了一个有问题的关键词,如下:

    竖线|在oracle中代表字符串连接,在用全文索引进行模糊查询时,如果作为关键字,则缺失右表达式,所以不断报错。

    因为刚接触过程不久,不太熟悉,这样一个小问题搞了我一个上午。这也算是我第一个跟业务相关的过程吧,在此纪念一下。

     

    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Java自学者论坛 ( 声明:本站文章及资料整理自互联网,用于Java自学者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-6-30 02:59 , Processed in 0.059892 second(s), 29 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表