zoukankan      html  css  js  c++  java
  • oracle 捕获异常,不中断游标循环

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

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

  • 相关阅读:
    day02_1spring3
    day01_2spring3
    动态代理的介绍
    day04_1hibernate
    day03_2hibernate
    Oracle11gR2安装完成后不手动配置监听的使用方法
    css的样式和选择符的优先权
    调用css时,link和@import url的区别
    jquery 获取和修改img标签的src属性
    正则表达式实现6-10位密码由数字和字母混合组成
  • 原文地址:https://www.cnblogs.com/cenliang/p/5412164.html
Copyright © 2011-2022 走看看